我正在使用带有capistrano的delayed_job,并且想要一种在Web应用程序启动时使用“script/delayed_job start”来启动delayed_job的方法。这样 capistrano 可以在部署时重新启动它。如果服务器重新启动,那么我的delayed_jobs应该与该项目一起启动。

我怎样才能做到这一点?我应该考虑在环境文件中执行此操作还是将其作为初始化程序?

有帮助吗?

解决方案

您应该使用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"

其他提示

结合Capistrano重新启动食谱,使用cron也很方便地使用Special启动delayed_job守护程序 @reboot 在crontab中的时间:

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

而且它更方便 每当 配置计划的任务:

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

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

不确定CRON的所有实施是否实际上仅运行 @reboot 在系统启动时,但至少Ubuntu接缝只能在启动时运行它们,而不是每当Cron Daemon启动或重新启动时。如果您通过 restartscript/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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top