我有一个用于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"
现在我希望将 这些挂钩应用于单独的delayed_job服务器(role :delayed_job <ip address>
)。这可能是优雅的吗?我是否必须在meta任务中包装每个delayed_job任务?或者编写我自己的任务而不是使用延迟工作提供的任务?
答案 0 :(得分:12)
在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
role :worker, "192.168.1.1" # Assign the IP of your machine
然后将:delayed_job_server_role
设置为该名称
set :delayed_job_server_role, :worker
这就是全部。现在,任务将被执行,但仅限于:worker
角色中列出的服务器。