Запуск delayed_job при запуске
Я использую delayed_job с capistrano и хотел бы запустить delayed_job при запуске веб-приложения, используя "script/delayed_job start". Таким образом, capistrano может перезапустить его при развертывании. Если сервер перезагружается, то мои delayed_job должны запускаться с проектом.
Как я могу это сделать?
Должен ли я смотреть на это в файлах среды или в качестве инициализатора?
Ответы
Ответ 1
Вы должны создать один рецепт с командой перезагрузки.
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"
Ответ 2
В сочетании с рецептом перезапуска capistrano довольно удобно использовать cron, чтобы запустить запуск delayed_job при запуске, используя специальное время @reboot
в crontab:
@reboot /bin/bash -l -c 'cd /path/to/app && RAILS_ENV=production script/delayed_job restart'
И еще удобнее вместе с whenever настроить запланированную задачу:
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
, он, вероятно, будет работать в любом случае.
Ответ 3
Немного поздно к этому вопросу, но версия 2.1.4 delayed_job имеет рецепты capistrano:
https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano
Это Дамиен Матье ответит, но уже часть драгоценности delayed_job.
Ответ 4
Теперь это работает как с 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"
Ответ 5
Можно загружать и отслеживать delayed_job с monit:
Как контролировать delayed_job с monit