2011-08-26 53 views
8

我有一个用于delayed_job任务的专用服务器。我想启动,停止并重新启动delayed_job工作人员只有此服务器。我正在使用由delayed_job提供的capistrano食谱。仅在特定服务器上调用delayed_job capistrano任务

当我只有一台服务器,这是我的配置:

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>)。这是否可以做到优雅?我是否必须在元任务中包装每个delayed_job任务?或者写我自己的任务,不使用延迟工作提供的任务?

回答

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角色中列出的服务器。

+0

耶!我太高兴了。 (我会在他们的wiki上记录该标志......) –

相关问题