ruby-on-rails - 检查我是否在 delayed_job 进程中

标签 ruby-on-rails ruby delayed-job

我有一个 Rails 应用程序,我在其中使用 delayed_job。我想检测我是否在 delayed_job 进程中;像

if in_delayed_job?
  # do something only if it is a delayed_job process...
else
  # do something only if it is not a delayed_job process...
end

但是我不知道怎么办。这是我现在使用的:

IN_DELAYED_JOB = begin
  basename        = File.basename $0
  arguments       = $*
  rake_args_regex = /\Ajobs:/

  ( basename == 'delayed_job' ) ||
  ( basename == 'rake' && arguments.find{ |v| v =~ rake_args_regex } )
end

另一种解决方案是,正如@MrDanA 所说:

$ DELAYED_JOB=true script/delayed_job start
# And in the app:
IN_DELAYED_JOB = ENV['DELAYED_JOB'].present?

但它们是恕我直言的弱解决方案。谁能提出更好的解决方案?

最佳答案

我处理这些问题的方式是通过偏执狂工作人员。我使用 delayed_job 对上传到我网站的视频进行转码。在视频模型中,我有一个名为 video_processing 的字段,默认设置为 0/null。每当视频被 delayed_job 转码时(无论是创建还是更新视频文件),它都会使用 delayed_job 中的钩子(Hook),并在作业开始时更新 video_processing。作业完成后,完成的 Hook 会将字段更新为 0。

在我的 View / Controller 中,我可以执行 video.video_processing? ? “视频转码进行中”:“视频钓鱼转码”

关于ruby-on-rails - 检查我是否在 delayed_job 进程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14858827/

相关文章:

ruby-on-rails - 同一资源的两个页面 - ActiveAdmin

ruby-on-rails - 设计重置密码 token 不能为空

ruby-on-rails - 将元素插入 PostgreSQL 数组而不覆盖它

ruby - 如何使用 ruby​​ 中的字符串方法 `[]`

mysql - Sidekiq:找到最后一份工作

ruby-on-rails - Delayed_Job,如何为 user_mailer.rb 方法设置优先级

ruby-on-rails - 电子邮件附件不适用于邮戳

ruby - (...)在 `require' : no such file to load -- 'gemname' (LoadError)

ruby-on-rails - 升级到 Rails 3.2.2 : How to solve the 'undefined method for Syck::DomainType' error related to the Delayed Job gem?

ruby-on-rails - delayed_job -i 通过 cron 脚本通过 ruby​​ 停止之前的进程后将不会启动