延迟工作 - Rails 4

时间:2013-11-13 15:45:30

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

我已安装延迟作业(gem 'delayed_job_active_record'),但我不了解其功能的几个方面。

首先安装delayed_job之后,我希望我的所有delay()方法都可以开箱即用,而不必手动启动delayed_job。

现在在README,它说

  

script / delayed_job可用于管理将开始处理作业的后台进程。

经过几行提及后,

  

如果您只想运行所有可用作业并退出,则可以使用rake作业:work

那些2和我应该在生产服务器中使用哪一个有什么区别?

如果我使用rake jobs:work我应该在初始化程序中启动一个新线程吗?

Thread.new do
   system(rake jobs:work)
end

这是一个好习惯吗?

1 个答案:

答案 0 :(得分:3)

使用script / delayed_job进行制作 - 您的capistrano部署会在推送新代码后调用以下内容

RAILS_ENV=production script/delayed_job stop
RAILS_ENV=production script/delayed_job start

请注意

  

Rails 4:用bin / delayed_job替换script / delayed_job

通常在开发中我将执行“进程内”作业,但可选择指定在我想模拟生产时运行的环境变量

参见https://github.com/collectiveidea/delayed_job#gory-details - config / initializers / delayed_job_config.rb

# execute job synch during tests and dev
# or pass arg for async in those environments
delayed_execution = if ENV['DELAY_JOBS']
  true
else
  !(Rails.env.test? or Rails.env.development?)
end

Delayed::Worker.delay_jobs = delayed_execution

然后如果你想在dev中运行并且在单独的进程中启动延迟轨道和作业进程 - 注意延迟作业不会自动加载更改,你必须每次都重新启动它

$ DELAY_JOBS=true rails s 
$ DELAY_JOBS=true bundle exec rake jobs:work