我正在使用带有capistrano的delayed_job,并希望使用'script / delayed_job start'启动网络应用程序时启动delayed_job。这样,capistrano可以在部署时重新启动它。如果服务器重新启动,那么我的delayed_jobs应该从项目启动。
我该怎么做? 我应该在环境文件中还是作为初始化程序进行此操作?
答案 0 :(得分:34)
结合capistrano重启配方,使用cron在启动时使用crontab中的特殊@reboot
时间启动delayed_job守护程序非常方便:
@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
,它可能会在任何一种情况下都有效。
答案 1 :(得分:26)
您应该使用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
然后添加它以在部署结束时执行。
after "deploy:update_code", "delayed_job:restart"
答案 2 :(得分:20)
这个问题有点晚了,但delayed_job版本2.1.4有capistrano食谱:
https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano
这是Damien Mathieu的答案,但已经是delayed_job宝石的一部分。
答案 3 :(得分:7)
这适用于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"
答案 4 :(得分:1)
可以启动&用monit监视delayed_job:
How to monitor delayed_job with monit