2009-11-12 4 views
34

Ich benutze delayed_job mit capistrano und möchte einen Start von delayed_job beim Start der Webanwendung mit dem 'script/delayed_job start'. Auf diese Weise kann capistrano es beim Deployment neu starten. Wenn der Server neu gestartet wird, sollten meine delayed_jobs mit dem Projekt starten.Starten von delayed_job beim Start

Wie kann ich das tun? Soll ich das in den Umgebungsdateien oder als Initialisierer tun?

Antwort

26

Sie sollten ein Rezept mit dem Neustartbefehl erstellen.

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 

Dann fügen Sie es hinzu, um am Ende Ihrer Bereitstellung ausgeführt werden.

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

Ich habe schon habe dieses Rezept in meinem Capistrano und es funktioniert. Meine Frage bezog sich mehr auf den Neustart des Servers. Momentan habe ich eine Arbeit gemacht, wo ich beim Booten ein Skript in meinem init.d starte und den delayed_job-Daemon starte. Es wäre schön, das als Teil meiner Bewerbung zu haben. – map7

+3

Sie können [god] (http://god.rubyforge.org/) verwenden, um den Prozess zu verwalten und ihn beim Systemstart automatisch zu starten. –

+3

delayed_job hat eine eigene recipes.rb-Datei, die die obige Aufgabe ziemlich genau hat, plus delayed_job: start und delayed_job: stop tasks. –

32

In Kombination mit dem Capistrano Neustart Rezepte es sehr bequem ist cron zu verwenden, um auch den delayed_job Daemon beim Start zu beginnen die besondere @reboot Zeit in einem crontab:

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

Und es ist noch bequemer zusammen mit whenever zu konfigurieren Sie eine geplante Aufgabe:

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

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

nicht sicher, ob alle Implementierung von cron nur tatsächlich @reboot beim Systemstart ausgeführt, aber zumindest Ubuntu Naht starte sie nur beim Start und nicht wenn der Cron-Daemon startet oder neu startet. Wenn Sie restart an script/delayed_job übergeben, wird es wahrscheinlich in jedem Fall funktionieren.

+0

Es funktioniert auch auf Debian Squeeze. –

+0

Dies ist die einfachste Lösung. Funktioniert auf Ubuntu 12.04 ganz gut. Liebe Crontabs. – Dex

7

Dies funktioniert nun mit beiden Schienen 2 und 3:

In deploy.rb, fügen Sie die folgenden Zeilen:

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"