我有一个专门的服务器用于delayed_job 任务。我想启动、停止和重新启动delayed_job工作人员only这个服务器。我正在使用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"
现在我想要那些钩子only应用于单独的delayed_job服务器(role :delayed_job <ip address>
)。这可以优雅地做到吗?我是否必须将每个delayed_job 任务包装在元任务中?或者自己写任务而不使用延迟工作提供的任务?
当您在 Capistrano 中定义任务时,您可以将任务的执行限制为特定角色。你这样做的方法是通过:role
option.
看来默认的delayed_job Capistrano配方 https://github.com/collectiveidea/delayed_job/blob/master/lib/delayed/recipes.rb做这个。
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
role :worker, "192.168.1.1" # Assign the IP of your machine
然后设置:delayed_job_server_role
以那个名字
set :delayed_job_server_role, :worker
就这样。现在任务将被执行,但仅限于列表中列出的服务器:worker
role.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)