在启动时启动延迟作业
Posted
技术标签:
【中文标题】在启动时启动延迟作业【英文标题】:Starting delayed_job at startup 【发布时间】:2010-12-15 17:04:24 【问题描述】:我正在使用带 capistrano 的delayed_job,并且想要一种在Web 应用程序启动时使用'script/delayed_job start' 来启动delayed_job 的方法。这样 capistrano 可以在部署时重新启动它。如果服务器重新启动,那么我的延迟作业应该与项目一起启动。
我该怎么做? 我应该考虑在环境文件中执行此操作还是作为初始化程序?
【问题讨论】:
【参考方案1】:结合 capistrano 重启配方,使用 cron 在启动时使用特殊的 @reboot
时间在 crontab 中启动 delay_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
,它可能在任何一种情况下都可以工作。
【讨论】:
这是最简单的解决方案。在 Ubuntu 12.04 上工作得很好。喜欢 crontab。【参考方案2】:您应该使用重启命令创建一个配方。
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 中找到了这个食谱并且它正在工作。我的问题更多与重新启动服务器有关。目前我已经完成了一项工作,在启动时我只是在我的 init.d 中运行一个脚本并启动 delay_job 守护进程。不过,将它作为我的应用程序的一部分会很好。 您可以使用god来管理进程并在机器启动时自动启动它。 delayed_job 有它自己的 recipes.rb 文件,它几乎与上面的任务完全一样,加上delayed_job:start 和delayed_job:stop 任务。 嗨@Ryan:我也注意到了这一点,但我不知道如何在我的deploy.rb
中包含/要求这些内容。只是 require
delayed_job'` 对我不起作用(我正在使用来自 git 的版本)。
使用 rails 3 我发现在 require 'delayed_job/recipes' 之前我需要在 deploy.rb 中做 require 'bundler/setup'【参考方案3】:
这个问题有点晚了,但delayed_job 2.1.4 版有capistrano 食谱:
https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano
这是 Damien Mathieu 的回答,但已经是 delay_job gem 的一部分。
【讨论】:
【参考方案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】:可以使用monit启动和监控delayed_job:How to monitor delayed_job with monit
【讨论】:
以上是关于在启动时启动延迟作业的主要内容,如果未能解决你的问题,请参考以下文章