Capistrano 3:仅在分配了角色的服务器池中的单个服务器上运行任务
我有20台服务器处于“web”角色。我只需要对其中一个执行一项任务,因为更改会影响共享存储。我目前的解决方案是绕过这一点(见下文)。为了寻找更好的方法,我没有大量的ruby或cap经验Capistrano 3:仅在分配了角色的服务器池中的单个服务器上运行任务,capistrano,capistrano3,Capistrano,Capistrano3,我有20台服务器处于“web”角色。我只需要对其中一个执行一项任务,因为更改会影响共享存储。我目前的解决方案是绕过这一点(见下文)。为了寻找更好的方法,我没有大量的ruby或cap经验 task :checkout_project_properties do num_runs = 0 on roles(:web), in: :sequence do if num_runs > 0 abort('Only running on one
task :checkout_project_properties do
num_runs = 0
on roles(:web), in: :sequence do
if num_runs > 0
abort('Only running on one server. Exiting')
end
execute("checkout-project-properties #{uc_stage} #{repo} #{branch}")
num_runs += 1
end
end
我假设您指的是您的生产配置,有这么多web服务器。在本例中,您的
config/deploy/production.rb
可能包含许多这样的行:
服务器“web_1”,角色:%w(web)
服务器“web_2”,角色:%w(web)
服务器“web_3”,角色:%w(web)
...
只需将其中一台服务器设为主服务器,使其看起来像:
服务器“web_1”,角色:%w(web),主:true
服务器“web_2”,角色:%w(web)
服务器“web_3”,角色:%w(web)
...
然后更改任务,使其如下所示:
任务:签出项目属性
在主(:web)上执行
执行(“签出项目属性#{uc_stage}#{repo}#{branch}”)
结束
结束
不适用于我:”(我尝试过使用或不使用(:web)
,以及其他组合。可能是因为我正在执行调用,而不是执行执行
?如果要在任何角色的服务器上运行,您可以做什么?似乎主
方法必须带参数