我在"begin"块中有一个Rails应用程序的3行代码,用于使用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控制台中显示"已终止"很久之后,它也似乎挂起了。
那么,想法呢?
我的一个朋友通过Twitter帮我回答了这个问题。答案是在服务器对象上调用reload()函数,然后检查它。Fog缓存服务器对象,必须更新它才能检查状态。
这是我的最终解决方案:
@server.reload
while @server.state != "terminated" do
sleep 3
@server.reload
end
编辑:感谢张,他在评论中有一个更好的答案:
@server.wait_for {state == 'terminated'}