2

我在“开始”块中有 3 行 Rails 应用程序代码,用于使用 Fog 终止 AWS 计算实例并在成功时设置字符串值:

  @server = @connection.servers.get(params[:id])
  @server.destroy
  @server_deletion_result = "success"

此代码有效,但它只是向 AWS 发送终止实例的命令。使用 Fog,我如何验证实例是否已完成终止

我试过这个,无济于事:

  while @server.state != "terminated" do
    sleep 3
  end
  @server_deletion_result = "success"

即使实例在 AWS 控制台中显示“已终止”,它似乎也只是挂起。

那么,想法?

4

1 回答 1

2

我的一个朋友通过 Twitter 帮助我回答了这个问题。答案是调用服务器对象上的 reload() 函数,然后检查它。雾缓存服务器对象,必须对其进行更新以检查状态。

这是我的最终解决方案:

  @server.reload
  while @server.state != "terminated" do
    sleep 3
    @server.reload
  end

编辑:感谢 Frederick Cheung,他在评论中有更好的答案:

@server.wait_for {state == 'terminated'} 
于 2013-02-08T19:04:34.060 回答