34 votes

Démarrer delay_job au démarrage

J'utilise delay_job avec capistrano et je voudrais un moyen de démarrer delay_job au démarrage de l'application Web à l'aide du script / delay_job start. De cette façon, capistrano peut le redémarrer lors du déploiement. Si le serveur est redémarré, alors delay_jobs devrait démarrer avec le projet.

Comment puis-je faire ceci? Devrais-je envisager de le faire dans les fichiers d'environnement ou en tant qu'initialiseur?

34voto

Mattias Wadman Points 6542

En combinaison avec la capistrano redémarrer recette c'est très pratique à utiliser cron également de démarrer le delayed_job démon au démarrage à l'aide de la @reboot du temps dans une crontab:

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

Et c'est encore plus pratique avec à chaque fois pour configurer une tâche planifiée:

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

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

Vous ne savez pas si la mise en œuvre de cron en fait seulement exécuter @reboot au démarrage du système, mais au moins Ubuntu coutures pour seulement exécuter au démarrage, et pas à chaque fois que le démon cron démarrer ou redémarrer. Si vous passez restart de script/delayed_job il sera probablement dans les deux cas.

26voto

Damien MATHIEU Points 13805

Vous devez créer une recette avec la commande restart.

 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
 

Ensuite, vous l'ajoutez pour qu'il soit exécuté à la fin de votre déploiement.

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

20voto

alvin Points 466

Un peu tard pour cette question, mais la version 2.1.4 de delay_job a des recettes capistrano:

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

C'est la réponse de Damien Mathieu, mais cela fait déjà partie du joyau de delay_job.

7voto

nilbus Points 5476

Cela fonctionne maintenant avec Rails 2 et 3:

Dans deploy.rb, ajoutez les lignes suivantes:

 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"
 

1voto

Laurynas Points 1292

Il est possible de démarrer et de surveiller delay_job avec monit:
http://stackoverflow.com/questions/1226302/how-to-monitor-delayed-job-with-monit

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X