Ruby Capistrano中具有属性(?)的多个角色
如何将属性传递给capistrano中的任务 我的目标是在负载平衡器中部署到多个服务器。我希望取出每个服务器,按顺序部署并重新添加,这样在任何时候都不会有多台服务器停机 我想这应该是一个类似于。。。(主机阵列将在查询我的负载平衡器后动态生成) 然后我的任务Ruby Capistrano中具有属性(?)的多个角色,ruby,attributes,roles,capistrano,Ruby,Attributes,Roles,Capistrano,如何将属性传递给capistrano中的任务 我的目标是在负载平衡器中部署到多个服务器。我希望取出每个服务器,按顺序部署并重新添加,这样在任何时候都不会有多台服务器停机 我想这应该是一个类似于。。。(主机阵列将在查询我的负载平衡器后动态生成) 然后我的任务 before :deploy, :deregister_instance_from_lb after :deploy, :register_instance_with_lb task deregister_instance_from_lb
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
有什么想法吗?贾斯汀,很抱歉这是不可能的,一旦流池打开(首先在服务器集上运行
),就无法访问服务器属性。(因为run
代码不是针对每个服务器运行的,而是针对池中的所有匹配项运行的)。有些人在这样做方面取得了一些成功,但实际上这是一种症状,即您的脚本需要太多您应该能够从生产环境中提取的信息
在本例中,您似乎在使用主机名传递给脚本,请使用Unix提供的:
run "./my_script.rb `hostname`"
这样行吗
参考资料:
•(第3.4.5节)
•(或$man(1)主机名)没人知道?我在下面的顺序块中找到了一些东西,但这就是我所知道的
find_servers.each do |server|
#TODO - remove from load balancer
#TODO - deploy
#TODO - add back to load balancer
end
我发现很难相信,从来没有人需要使用cap执行顺序任务。我使用它来串联而不是并行地重新启动服务器
task :my_task, :roles => :web do
find_servers_for_task(current_task).each do |server|
run "[task command here]", :hosts => server.host
end
end
你好,李,这是有用的,但可能不适用于我的情况-我认为我过于简单化了。你能看看修改后的问题,让我知道你的想法吗?
task :my_task, :roles => :web do
find_servers_for_task(current_task).each do |server|
run "[task command here]", :hosts => server.host
end
end