gpt4 book ai didi

ruby - 仅在特定服务器上调用 delayed_job capistrano 任务

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:19 24 4
gpt4 key购买 nike

我有一个专门用于 delayed_job 任务的服务器。我想在此服务器上启动、停止和重新启动delayed_job worker。我正在使用 delayed_job 提供的 Capistrano 食谱。

当我只有 1 个服务器时,这是我的配置:

before "deploy:restart", "delayed_job:stop"
after "deploy:restart", "delayed_job:start"

after "deploy:stop", "delayed_job:stop"
after "deploy:start", "delayed_job:start"

现在我想让这些 Hook 应用于单独的 delayed_job 服务器 ( role :delayed_job <ip address> )。这可以优雅地做吗?我是否必须将每个 delayed_job 任务包装在一个元任务中?还是我自己写任务而不使用延迟工作提供的任务?

最佳答案

当您在 Capistrano 中定义任务时,您可以将任务的执行限制为特定角色。执行此操作的方法是传递 :role 选项。

似乎default delayed_job Capistrano recipe这样做。

desc "Stop the delayed_job process"
task :stop, :roles => lambda { roles } do
run "cd #{current_path};#{rails_env} script/delayed_job stop"
end

根据源代码,该任务从 :delayed_job_server_role 配置变量中获取角色列表。

回到您的问题,要将任务的执行范围缩小到特定的服务器组,请在您的 deploy.rb

中定义一个新角色(例如 worker)
role :worker, "192.168.1.1" # Assign the IP of your machine

然后将 :delayed_job_server_role 设置为该名称

set :delayed_job_server_role, :worker

就是这样。现在任务将被执行,但仅限于 :worker 角色中列出的服务器。

关于ruby - 仅在特定服务器上调用 delayed_job capistrano 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210715/

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