В настоящее время я работаю на rails 3.1 rc4 и использую Redis и Resque для создания очереди серверов в стойке.
Используемый мной жемчуг стойки, cloudservers, сообщает вам, когда ваш сервер настроен с помощью метода состояния.
Что я пытаюсь сделать с приведенным ниже кодом, так это выполнить код в 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? Также это кажется плохим способом постановки задач в очередь. Должен ли я поставить в очередь новую задачу, которая просто проверяет, готов ли сервер или нет?
Огромное спасибо!