我有一个Rails应用程序,我在其中使用delayed_job。我想检测我是否处于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?
但他们恕我直言弱解。任何人都可以提出一个更好的解
这是一种方法吗?怎么样给它发送一个标志来表明这个作业是否被延迟作业调用。它可以默认为false,只有在从Delayed Job实际调用时才被设置。快速简单的解决方案,如果你找不到其他东西。 – MrDanA 2013-02-13 17:01:17
是的,这是另一种解决方案(我认为你的意思是'DELAYED_JOB = true script/delayed_job start'),但我认为这也是一个弱解决方案,因为我必须记得在使用delayed_job启动应用程序时设置或取消设置变量或而不是 – mdesantis 2013-02-13 17:03:45
延迟作业启动时是否自动运行此方法?我认为你正在做的是这样的:代码中的'user.delay.send_email'。然后,您可以将该行更改为“user.delay.send_email(true)”,其中“true”表示它被称为延迟作业的一部分。 – MrDanA 2013-02-13 17:14:39