如何将属性传递给我在capistrano中的任务?
我的目标是在负载均衡器中部署到多个服务器。我想把每一个都拿出去,部署,然后按顺序添加回来,这样就不会有多个服务器随时关闭。
我认为这将是......(并且在查询我的负载均衡器后将动态生成hosts数组)......
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
有什么想法吗?
答案 0 :(得分: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
答案 1 :(得分:2)
贾斯汀,对不起,我很抱歉,一旦打开了流池(服务器集上的第一个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(或$ man(1)主机名)
答案 2 :(得分:1)
没人知道?我在下面找到了关于顺序块的内容,但就我而言......
find_servers.each do |server|
#TODO - remove from load balancer
#TODO - deploy
#TODO - add back to load balancer
end
我发现很难相信没有人需要用限额执行顺序任务。