2010-04-14 2 views
2

Как передать атрибуты моим задачам в capistrano?Несколько ролей с атрибутами (?) В Capistrano

Моя цель - развернуть на несколько серверов в балансировщике нагрузки. Я бы хотел, чтобы каждый из них выходил, развертывал и добавлял его последовательно, поэтому в любой момент не более одного сервера.

Я думаю, что это будет что-то вдоль линий ... (а массив хостов будет генерироваться динамически после запроса моей балансировки нагрузки) ...

role :app, 
     [["server_one", {:instanceId => "alice"}], 
     ["server_two", {:instanceId => "bob"}], 
     ["server_three", {:instanceId => "charles"}]] 

А потом для моих задач. ..

before :deploy, :deregister_instance_from_lb 
after :deploy, :register_instance_with_lb 

task deregister_instance_from_lb 
    #TODO - Deregister #{instanceId} from load balancer 
end 

task register_instance_with_lb 
    #TODO - Register #{instanceId} with load balancer 
end 

Любые идеи?

ответ

1

Никто не знает? Я нашел кое-что о последовательном блоке ниже, но вот насколько я получил ...

find_servers.each do |server| 
    #TODO - remove from load balancer 
    #TODO - deploy 
    #TODO - add back to load balancer 
end 

мне трудно поверить, что ни один никогда не нужно делать последовательные задачи с крышкой.

2

Justin, извините, что это невозможно, как только пул потоков открыт (сначала run на сервере), нет доступа к свойствам сервера. (поскольку код run не запускается для каждого сервера, а не для сопоставления в пуле). Некоторые люди добились определенных успехов в этом, но на самом деле это признак того, что вашим сценариям требуется слишком много информации, которую вы сможете извлечь из своей производственной среды.

Как и в этом случае, кажется, что вы делаете что-то подобное, используя имя хоста, чтобы перейти к сценарию, используйте то, что Unix дает:

run "./my_script.rb `hostname`" 

Будет ли это работать?

Ссылки:

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html (раздел 3.4.5)

http://unixhelp.ed.ac.uk/CGI/man-cgi?hostname (или $ человек (1) имя хоста)

+0

Здравствуйте, Ли, это полезно знать, но, возможно, не применимо к моей ситуации. Думаю, я упрощен. Можете ли вы взглянуть на пересмотренный вопрос и сообщить мне, что вы думаете? – Justin

4

Я использую это, чтобы перезапустить мои серверы последовательно, а не параллельно.

task :my_task, :roles => :web do 
    find_servers_for_task(current_task).each do |server| 
    run "[task command here]", :hosts => server.host 
    end 
end 
Смежные вопросы