在启动时启动delayed_job
我正在使用delayed_job和capistrano,并希望在启动Web应用程序时使用'script/delayed_job start'启动delayed_job。这样Capistrano可以在部署时重新启动它。如果服务器重新启动,那么我的delayed_jobs应该启动该项目。在启动时启动delayed_job
我该怎么做? 我应该在环境文件或初始化程序中这样做吗?
您应该使用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"
末了一下这个问题,但delayed_job的2.1.4版本有Capistrano的食谱:
https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano
这是Damien Mathieu的回答,但已经是delayed_job gem的一部分。
在与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
它可能会在任何情况下工作。
它也适用于Debian Squeeze。 – 2012-10-31 17:50:36
这是最简单的解决方案。在Ubuntu 12.04上运行得很好。爱crontabs。 – Dex 2014-05-10 00:17:53
这现在与两个轨道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"
我已经有了这个配方在我Capistrano的,它的工作。我的问题更多地涉及重新启动服务器。目前我已经在启动的地方完成了一项工作,我只需在init.d中运行脚本并启动delayed_job守护程序。尽管如此,作为我的应用程序的一部分,这将是很好的。 – map7 2009-11-17 04:47:05
您可以使用[god](http://god.rubyforge.org/)管理进程并在机器启动时自动启动。 – 2009-11-17 08:24:14
delayed_job拥有自己的recipes.rb文件,它几乎与上述任务完全相同,另加delayed_job:start和delayed_job:停止任务。 – 2010-01-12 18:33:47