2011-08-26 9 views
8

Gecikmeli görevler için özel bir sunucum var. sadece bu sunucuda başlatmak, durdurmak ve delayed_job işçilerini yeniden başlatmak istiyorum. Delayed_job tarafından sağlanan capistrano tarifleri kullanıyorum.delayed_job capistrano görevlerini yalnızca belirli sunucularda davet edin

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

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

Şimdi o kanca sahip olmak istiyorum sadece ayrı delayed_job sunucusuna (role :delayed_job <ip address>) için geçerlidir:

sadece 1 sunucu vardı

, bu benim yapılandırma oldu. Bu zarif yapmak mümkün mü? Her delayed_job görevini bir meta görevinde sarmak zorunda mıyım? Veya kendi görevlerimi yazın ve gecikmiş bir işte verilenleri kullanmayın?

cevap

12

Capistrano'da bir görev tanımladığınızda, görevin yürütülmesini belirli rol (ler) ile kısıtlayabilirsiniz. Bunu yapmanın yolu, :role seçeneğini geçirmektir.

default delayed_job Capistrano recipe bunu yapıyor gibi görünüyor.

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

kaynak koduna göre, görev :delayed_job_server_role yapılandırma değişkenden rollerin listesini getirir. Geri sorununuza

, Sonra o adı

için :delayed_job_server_role ayarlayın deploy.rb

role :worker, "192.168.1.1" # Assign the IP of your machine 

içinde (örneğin bir işçi için) yeni bir rol tanımlamak, sunucuların belirli bir gruba görevlerin yürütülmesini daraltmak için

Hepsi bu kadar. Şimdi görevler yürütülecek, ancak sadece :worker rolünde listelenen sunucular için.

+0

Yay! Çok mutluyum. (ve bu viji'nin üzerindeki bayrağı ... –

İlgili konular