私は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
しかし、私はどのように把握することはできません。これは私が今使っているものです:@MrDanAが言ったように
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
別の解決策は、次のとおりです。
$ DELAYED_JOB=true script/delayed_job start
# And in the app:
IN_DELAYED_JOB = ENV['DELAYED_JOB'].present?
が、彼らは私見弱いソリューションです。誰かがより良い解決策を提案できますか?
これは方法ですか?遅延ジョブからジョブが呼び出されているかどうかを示すフラグを送るのはどうですか?デフォルトではfalseに設定され、実際に遅延ジョブから呼び出されたときにのみ設定されます。あなたが他の何かを見つけることができない場合、迅速かつ簡単な解決策。 – MrDanA
それは別の解決策です(私はあなたが 'DELAYED_JOB = true script/delayed_job start'を意味すると思います)。しかし、私はdelayed_jobでアプリを起動するときに変数を設定または解除することを忘れないでください。しない – mdesantis
遅延ジョブの開始時にこのメソッドが自動的に実行されますか?代わりに、あなたのコードのどこかで 'user.delay.send_email'のようにしていると仮定しました。次に、その行を 'user.delay.send_email(true)'に変更することができます。ここで 'true'は遅延したジョブの一部として呼び出されていることを示します。 – MrDanA