启动时启动delayed_job

我正在使用与capistrano的delayed_job,并希望通过使用'script / delayed_job start'启动Web应用程序启动时的delayed_job。 这样capistrano可以在部署时重新启动它。 如果服务器重新启动,那么我的delayed_jobs应该启动项目。

我怎样才能做到这一点? 我应该看看在环境文件中做这个还是作为一个初始化程序?

您应该使用重新启动命令创build一个配方。

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" 

结合capistrano重新启动配方,使用cron启动delayed_job守护进程非常方便,在启动时使用crontab中的特殊@reboot时间:

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

而且每当configuration一个计划的任务时 ,它就更加方便:

 job_type :envcommand, 'cd :path && RAILS_ENV=:environment :task' every :reboot do envcommand 'script/delayed_job restart' end 

不知道是否所有的cron实现实际上只在系统启动时运行@reboot ,但至lessUbuntu接口只在启动时运行,而不是在cron守护进程启动或重新启动时运行。 如果您将restart script/delayed_job它可能会在任何情况下工作。

这个问题迟了一点,但是delayed_job 2.1.4版的capistrano食谱:

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

这是Damien Mathieu的回答,但已经是delayed_job gem的一部分。

这现在适用于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" 

可以用monit启动和监控delayed_job:
如何用monit监控delayed_job