4

我已经安装了延迟作业 ( gem 'delayed_job_active_record'),但我不了解它的功能。

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

现在在自述文件中说

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

在几行之后它提到,

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

这两个和我应该在我的生产服务器中使用哪一个有什么区别?

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

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

这是一个好习惯吗?

4

1 回答 1

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

那么如果你想在开发中运行延迟单独的进程启动两个轨道和作业进程 - 请注意延迟的作业不会自动加载更改,你必须每次重新启动它

$ DELAY_JOBS=true rails s 
$ DELAY_JOBS=true bundle exec rake jobs:work
于 2013-11-13T16:03:31.277 回答