2011-08-26 46 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上記錄該標誌......) –

相關問題