我已安装延迟作业(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
这是一个好习惯吗?
答案 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