Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Capistrano中具有属性(?)的多个角色_Ruby_Attributes_Roles_Capistrano - Fatal编程技术网

Ruby 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

如何将属性传递给capistrano中的任务

我的目标是在负载平衡器中部署到多个服务器。我希望取出每个服务器,按顺序部署并重新添加,这样在任何时候都不会有多台服务器停机

我想这应该是一个类似于。。。(主机阵列将在查询我的负载平衡器后动态生成)

然后我的任务

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