gpt4 book ai didi

Capistrano 部署到所有服务器,但仅在一个服务器上运行一些任务

转载 作者:行者123 更新时间:2023-12-03 20:33:37 25 4
gpt4 key购买 nike

我只在一台服务器上部署了我的 Symfony2 应用程序几个月,它是完美的,但是随着我添加了更多服务器,当我想同时更新我的​​所有服务器时我卡住了,但只运行一些命令一次(如数据库迁移、 Assets 生成和推送到 S3)。

这是我的服务器:

server '192.168.0.100', user: 'ubuntu', roles: %w{app db web toto}
server '192.168.0.101', user: 'ubuntu', roles: %w{app db web}

这是我的 deploy.rb 中的一项自定义任务:
namespace :specific do
task :command do
on roles(:all) do |host|
if host.roles.include?(:toto)
invoke 'symfony:console', 'one:specific:command'
end
end
end
end

cap --roles=toto staging deploy但后来我的两台服务器中只有一台更新了。

我试过这样的过滤方法:
namespace :assets do
task :increment do
set :filter, :roles => %w{toto}
invoke 'symfony:console', 'one:specific:command'
end
end

和其他方法一样,从堆栈溢出答案中复制粘贴,但没有找到任何匹配的答案😕

最佳答案

我可能会犹豫更长时间,因为这个答案不起作用。而且我仍然无法在任何其他帖子、SO 问题或 Capistrano 文档中找到解决方案......😓

我犹豫着发布这个问题,终于找到了我的答案。但由于我花了很长时间搜索,这里是答案:

只需添加 primary: true到一个网站:

server '192.168.0.100', roles: %w{app db web}, primary: true
server '192.168.0.101', roles: %w{app db web}

而在 deploy.rb :
namespace :specific do
task :command do
on primary(:web) do
invoke 'symfony:console', 'one:specific:command'
end
end
end

我的命令输出仍然指定了两个服务器,但希望只有一个执行了特定命令:
  03 php app/console one:specific:command
✔ 03 ubuntu@192.168.0.100 1.153s
✔ 03 ubuntu@192.168.0.101 6.551s

最后!

关于Capistrano 部署到所有服务器,但仅在一个服务器上运行一些任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com