2011-08-26 11 views
8

Ho un server dedicato per le attività delayed_job. Voglio avviare, arrestare e riavviare gli operatori delayed_job su solo questo server. Sto usando le ricette capistrano fornite da delayed_job.Invoke delayed_job capistrano attività solo su server specifici

Quando ho avuto solo 1 server, questo è stato il mio config:

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

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

Ora voglio avere quei ganci solo si applicano a un server delayed_job separato (role :delayed_job <ip address>). È possibile farlo elegantemente? Devo racchiudere ogni task delayed_job in un meta-compito? O scrivere i miei compiti e non usare quelli forniti dal lavoro in ritardo?

risposta

12

Quando si definisce un'attività in Capistrano è possibile limitare l'esecuzione dell'attività a ruoli specifici. Il modo in cui lo fai è passando l'opzione :role.

Sembra che lo default delayed_job Capistrano recipe faccia questo.

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

Secondo il codice sorgente, il compito recupera l'elenco dei ruoli dalla variabile di configurazione :delayed_job_server_role.

Torna al tuo problema, per restringere l'esecuzione dei compiti a un gruppo specifico di server, definire un nuovo ruolo (per esempio lavoratori) nel vostro deploy.rb

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

Quindi impostare il :delayed_job_server_role a quel nome

set :delayed_job_server_role, :worker 

Questo è tutto. Ora le attività verranno eseguite, ma solo per i server elencati nel ruolo :worker.

+0

Yay! Sono così felice. (e andrò a documentare quella bandiera sul loro wiki ...) –