目前我在 rails 3.1 rc4 上运行并使用 redis 和 resque 来排队创建机架空间服务器。
我正在使用的 rackspace gem,cloudservers,会告诉您何时使用 status 方法完成了服务器设置。
我试图用下面的代码做的是只有在服务器处于活动状态并准备好使用之后才执行 elsif 中的代码。
class ServerGenerator
@queue = :servers_queue
def self.perform(current_id)
current_user = User.find(current_id)
cs = CloudServers::Connection.new(:username => "***blocked for security***", :api_key => "***blocked for security***")
image = cs.get_image(49) # Set the linux distro
flavor = cs.get_flavor(1) # Use the 256 Mb of Ram instance
newserver = cs.create_server(:name => "#{current_user.name}", :imageId => image.id, :flavorId => flavor.id)
if newserver.status == "BUILD"
newserver.refresh
elsif newserver.status == "ACTIVE"
# Do stuff here, I generated another server with a different, static name
# so that I could see if it was working
cs = CloudServers::Connection.new(:username => "***blocked for security***", :api_key => "***blocked for security***")
image = cs.get_image(49)
flavor = cs.get_flavor(1)
newserver = cs.create_server(:name => "working", :imageId => image.id, :flavorId => flavor.id)
end
end
end
当我运行上面的代码时,它只生成了第一个使用“current_user.name”的服务器,因为它的名字。循环是否有助于 if 语句?此外,这似乎是一种对任务进行排队的糟糕方式。我是否应该将一个新任务排入队列,该任务只是检查服务器是否准备好?
非常感谢!