2009-11-12 11 views
34

Sto usando delayed_job con capistrano e vorremmo un modo per avviare delayed_job all'avvio dell'applicazione Web utilizzando 'script/delayed_job start'. In questo modo capistrano può riavviarlo durante l'implementazione. Se il server viene riavviato, il mio delayed_jobs dovrebbe avviarsi con il progetto.Avvio delayed_job all'avvio

Come posso fare questo? Dovrei guardare a farlo nei file di ambiente o come inizializzatore?

risposta

26

È necessario creare una ricetta con il comando di riavvio.

namespace :delayed_job do 
    desc "Restart the delayed_job process" 
    task :restart, :roles => :app do 
     run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job restart" 
    end 
end 

Quindi aggiungerlo per essere eseguito al termine della distribuzione.

after "deploy:update_code", "delayed_job:restart" 
+0

Ho già questa ricetta nella mia Capistrano e che sta funzionando. La mia domanda era più legata al riavvio del server. Al momento ho lavorato su un punto in cui all'avvio ho appena eseguito uno script nel mio init.d e avviato il demone delayed_job. Sarebbe bello averlo come parte della mia applicazione però. – map7

+3

È possibile utilizzare [god] (http://god.rubyforge.org/) per gestire il processo e avviarlo automaticamente all'avvio della macchina. –

+3

delayed_job ha il proprio file recipes.rb che ha esattamente il compito sopra, più delayed_job: start e delayed_job: stop tasks. –

32

In combinazione con la ricetta Capistrano riavvio è abbastanza comodo da usare cron per avviare anche il demone delayed_job all'avvio utilizzando lo speciale @reboot volta in un crontab:

@reboot /bin/bash -l -c 'cd /path/to/app && RAILS_ENV=production script/delayed_job restart' 

Ed è ancora più conveniente con whenever a configurare un'operazione pianificata:

job_type :envcommand, 'cd :path && RAILS_ENV=:environment :task' 

every :reboot do 
    envcommand 'script/delayed_job restart' 
end 

Non so se tutte implementazione di cron effettivamente eseguito solo @reboot all'avvio del sistema, ma almeno cuciture a Ubuntu solo eseguirli all'avvio e non ogni volta che il demone cron si avvia o si riavvia. Se passi restart a script/delayed_job probabilmente funzionerà in entrambi i casi.

+0

Funziona anche su Debian Squeeze. –

+0

Questa è la soluzione più semplice. Funziona su Ubuntu 12.04 bene. Amo crontabs – Dex

7

Questo ora funziona sia con Rails 2 e 3:

In deploy.rb, aggiungere le seguenti righe:

require "delayed/recipes" 
set :rails_env, 'production' #added for delayed_job 
before "deploy:restart", "delayed_job:stop" 
after "deploy:restart", "delayed_job:start" 
after "deploy:stop", "delayed_job:stop" 
after "deploy:start", "delayed_job:start" 
Problemi correlati