【发布时间】:2013-01-29 07:27:06
【问题描述】:
我有一个使用delayed_job 的Rails 应用程序。我想检测我是否处于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?
但恕我直言,它们是弱解决方案。谁能提出更好的解决方案?
【问题讨论】:
-
这是一种方法吗?向它发送一个标志以指示该作业是否是从延迟作业中调用的怎么样。它可以默认为 false,仅在从延迟作业实际调用时设置。如果您找不到其他任何东西,快速简便的解决方案。
-
是的,这是另一种解决方案(我认为您的意思是
DELAYED_JOB=true script/delayed_job start),但我认为这也是一个弱解决方案,因为我必须记住在使用延迟作业启动应用程序时设置或取消设置变量与否 -
延迟作业启动时是否会自动运行此方法?我假设您正在做这样的事情:
user.delay.send_email在您的代码中某处。然后您可以将该行更改为user.delay.send_email(true),其中true表示它被作为延迟作业的一部分调用。 -
如何尝试停止(杀死)为该进程生成的工作人员,因为您会知道所生成的工作人员的 pid。如果它给出没有此类进程的错误,您可以假设您在外面的工作..
-
@MrDanA 问题是我想知道我是否在延迟作业过程中在延迟作业方法之外...
标签: ruby-on-rails ruby delayed-job