2009-11-12 18 views
34

Używam delayed_job z capistrano i chciałbym rozpocząć opóźnione rozpoczęcie pracy przy uruchomieniu aplikacji internetowej za pomocą "script/delayed_job start". W ten sposób capistrano może ponownie uruchomić go po wdrożeniu. Jeśli serwer zostanie ponownie uruchomiony, mój delayed_jobs powinien rozpocząć pracę z projektem.Starting delayed_job przy starcie

Jak mogę to zrobić? Czy powinienem patrzeć na to w plikach środowiska lub jako inicjator?

Odpowiedz

26

Powinieneś utworzyć jedną recepturę za pomocą polecenia restartu.

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 

Następnie dodaje się go do wykonania na końcu wdrożenia.

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

Mam już ten przepis w moim Capistrano i to działa. Moje pytanie było bardziej związane z ponownym uruchomieniem serwera. Obecnie zrobiłem pracę nad tym, gdzie po uruchomieniu uruchamiam skrypt w moim init.d i uruchamiam demona delayed_job. Byłoby miło mieć to jako część mojej aplikacji. – map7

+3

Możesz użyć [god] (http://god.rubyforge.org/), aby zarządzać procesem i uruchamiać go automatycznie po uruchomieniu komputera. –

+3

delayed_job ma własny plik recipes.rb, który ma dokładnie powyższe zadanie, plus delayed_job: start i delayed_job: stop task. –

32

W połączeniu z recepturą capistrano restartu To dość wygodne w użyciu crona również uruchomić demona delayed_job przy starcie za pomocą specjalnego @reboot czas w crontab:

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

I to nawet wygodniejsze wraz z whenever do skonfigurować zaplanowane zadanie:

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

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

Nie wiem, czy wszystko faktycznie realizacja cron tylko uruchomić @reboot przy starcie systemu, ale przynajmniej szwy Ubuntu uruchamiać je tylko przy uruchamianiu, a nie za każdym razem, gdy demon cron uruchamia się lub uruchamia ponownie. Jeśli zdasz restart do script/delayed_job prawdopodobnie będzie działać w obu przypadkach.

+0

Działa również na systemie Debian Squeeze. –

+0

To jest najprostsze rozwiązanie. Działa na Ubuntu 12.04. Miłość crontabs. – Dex

7

To teraz współpracuje z obiema szynami 2 i 3:

W deploy.rb dodaj następujące linie:

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" 
Powiązane problemy