Запуск delayed_job при запуске - PullRequest
       10

Запуск delayed_job при запуске

34 голосов
/ 12 ноября 2009

Я использую delayed_job с capistrano и хотел бы запустить delayed_job при запуске веб-приложения с помощью 'script / delayed_job start'. Таким образом, Capistrano может перезапустить его при развертывании. Если сервер будет перезагружен, то мои delayed_jobs должны запуститься с проектом.

Как я могу это сделать? Должен ли я смотреть на это в файлах среды или в качестве инициализатора?

Ответы [ 5 ]

34 голосов
/ 12 июня 2011

В сочетании с рецептом перезапуска Capistrano весьма удобно использовать cron, чтобы также запустить демон delayed_job при запуске, используя специальное время @reboot в crontab:

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

И еще удобнее вместе с всякий раз, когда настраивать запланированное задание:

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

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

Не уверен, что все реализации cron на самом деле запускаются @reboot только при запуске системы, но, по крайней мере, Ubuntu предлагает их запускать только при запуске, а не всякий раз, когда демон cron запускается или перезапускается. Если вы передадите restart на script/delayed_job, это, вероятно, будет работать в любом случае.

26 голосов
/ 12 ноября 2009

Вы должны создать один рецепт с командой перезагрузки.

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

Затем вы добавляете его для выполнения в конце развертывания.

after "deploy:update_code", "delayed_job:restart"
20 голосов
/ 09 апреля 2011

Немного опоздал на этот вопрос, но версия delayed_job 2.1.4 имеет рецепты капистрано:

https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano

Это ответ Дэмиена Матье, но он уже является частью драгоценного камня delayed_job.

7 голосов
/ 17 июля 2011

Теперь это работает с Rails 2 и 3:

В deploy.rb добавьте следующие строки:

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"
1 голос
/ 14 мая 2010

Можно загрузить и отслеживать delayed_job с помощью monit:
Как следить за delayed_job с помощью monit

...