延迟作业是否作为守护进程运行?

时间:2011-04-05 03:51:56

标签: ruby-on-rails ruby delayed-job

似乎delayed_job是一个用于调度任务的框架(通过mysql db)。

实际处理是通过ruby完成的,并且该过程不能作为deamon正确运行吗?

即。我们应该以某种方式通过cron工作制作红宝石火?或者

1 个答案:

答案 0 :(得分:4)

延迟作业确实作为一个进程运行,甚至能够运行多个工作程序。

这些进程中的每一个都完全加载了rails应用程序 - 在许多情况下这可能不太理想。

您可以通过以下方式开始延迟工作:

RAILS_ENV=production ruby script/delayed_job start -n 3

在我自己的项目中,我使用bluepill来确保重新启动任何崩溃的工作人员:

workers = 5
app_name = "my_app"
Bluepill.application("#{app_name}_delayed_job", :log_file => "#{app_home}/shared/log/bluepill.log") do |app|
  (0...workers).each do |i|
    app.process("delayed_job.#{i}") do |process|
      process.working_dir = "#{app_home}/current"

      process.start_grace_time    = 10.seconds
      process.stop_grace_time     = 10.seconds
      process.restart_grace_time  = 10.seconds

      process.start_command = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job start -i #{i}"
      process.stop_command  = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job stop -i #{i}"

      process.pid_file = "#{app_home}/shared/pids/delayed_job.#{i}.pid"
      process.uid = app_name # I install my applications under a user of the same name
      process.gid = app_name
    end
  end