在启动时启动delayed_job

map*_*ap7 34 capistrano ruby-on-rails delayed-job

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

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

Mat*_*man 34

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

@reboot /bin/bash -l -c 'cd /path/to/app && RAILS_ENV=production script/delayed_job restart'
Run Code Online (Sandbox Code Playgroud)

无论何时配置计划任务,它都更方便:

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

every :reboot do
  envcommand 'script/delayed_job restart'
end
Run Code Online (Sandbox Code Playgroud)

不确定cron的所有实现是否实际上只@reboot在系统启动时运行,但至少Ubuntu接口只在启动时运行它们,而不是在cron守护程序启动或重启时.如果你传递restartscript/delayed_job它可能会在任何一种情况下都有效.


Dam*_*IEU 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
Run Code Online (Sandbox Code Playgroud)

然后添加它以在部署结束时执行.

after "deploy:update_code", "delayed_job:restart"
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用[god](http://god.rubyforge.org/)来管理进程并在计算机启动时自动启动它. (3认同)
  • delayed_job有自己的recipes.rb文件,几乎完全具有上述任务,加上delayed_job:start和delayed_job:停止任务. (3认同)
  • 使用rails 3我发现在require'delay_job/recipes'之前我需要在deploy.rb中执行'bundler/setup' (2认同)

alv*_*vin 20

这个问题有点晚了,但是delayed_job版本2.1.4有capistrano食谱:

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

这是Damien Mathieu的答案,但已经是delayed_job宝石的一部分.


Edw*_*son 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"
Run Code Online (Sandbox Code Playgroud)