gpt4 book ai didi

ruby - 如何禁用 capistrano 2.x 中一个角色的默认部署流程?

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:03 25 4
gpt4 key购买 nike

我正在使用普通的 capistrano 来部署一个用 node 编写的简单集群。

我定义的角色如下:

role :boss, "bosshost"
role :worker, { get_worker_hosts }

我正在使用 capistrano 的默认部署舞蹈 + 自己的任务将 worker 应用程序放在服务器上。

问题是我不想为 boss 做任何事情,因为它只是一个脚本。理想情况下,这样做:

namespace :boss
task :update, :roles => [:boss]
upload 'boss.js', "#{boss_home}/boss.js"
end
task :restart, :roles => [:boss]
run "forever restart #{boss_home}/boss.js"
end
end

我在 deploy:finalize_update 之后发生的所有 worker 相关任务中使用了 :roles => [:worker]。但是,运行 $ cap deploy 仍然会将不必要的东西放在 boss 服务器上。

我如何告诉 capistrano deploy 任务和以下默认任务应该只在具有 worker 角色的服务器上运行?

最佳答案

我自己也能解决这个问题。在我的特殊情况下,我只需要将应用程序部署到一台服务器上,因为应用程序集群使用 NFS 挂载,但我需要在部署完成后在我的应用程序集群中的所有服务器上重新启动节点守护程序。

这是我的解决方案,即为每个服务器设置角色(您也可以使用 role):

server 'a-server.com', :app, :web, :service
server 'another-server.com', :service, :no_release => true

关键是 :no_release => true 因此代码不会部署到此服务器。内置任务将遵循此准则,我也有一些自定义任务。我通过查看并行运行的任务的部署输出并添加以下内容来解决自定义任务:

task "my_task", :except => { :no_release => true } do
# do stuff here...
# Example of using a role with `run`
run "sudo /etc/init.d/nodejs-#{application} restart", :roles => :service
end

希望对您有所帮助!

关于ruby - 如何禁用 capistrano 2.x 中一个角色的默认部署流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557875/

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