mde*_*tis 7 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何.这就是我现在使用的:
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
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是,正如@MrDanA所说:
$ DELAYED_JOB=true script/delayed_job start
# And in the app:
IN_DELAYED_JOB = ENV['DELAYED_JOB'].present?
Run Code Online (Sandbox Code Playgroud)
但他们是IMHO弱的解决方案.有谁能建议更好的解决方案?
我处理这些问题的方式是通过一名偏执狂的工作人员。我使用delayed_job对上传到我的网站的视频进行转码。在视频模型中,我有一个名为 video_processing 的字段,默认设置为 0/null。每当延迟作业对视频进行转码时(无论是创建还是更新视频文件),它将使用来自延迟作业的挂钩,并在作业启动时更新视频处理。一旦作业完成,完成的挂钩将将该字段更新为 0。
在我的视图/控制器中我可以做video.video_processing? ? "Video Transcoding in Progress" : "Video Fished Transcoding"