遅れているジョブでAPIレート制限を処理することに関してthis guideをフォローしようとしています。ここで遅延ジョブエラーコールバックが実行されないのはなぜですか?
は私の仕事である:ここでは
# app/jobs/mailer_job.rb
class MailerJob < Struct.new(:custom_id)
def perform
# Intentionally throw an error to test error callback
raise StandardError
end
def error(job, exception)
puts 'Error!'
end
end
は、私がインストールされている潜在的に関連する宝石です。私はRuby 1.9.3を使用しています。
gem 'rails', '3.0.20'
gem 'passenger', '5.0.21'
gem 'delayed_job_active_record', '4.1.1'
gem 'delayed_job', '4.1.2'
gem 'foreman', '0.83.0'
私が遅れ、ジョブ・ログに以下を参照してください。
[Worker(host:ubuntu pid:9912)] Starting job worker
[Worker(host:ubuntu pid:9912)] Job MailerJob (id=1720) RUNNING
[Worker(host:ubuntu pid:9912)] Job MailerJob (id=1720) FAILED (0 prior attempts) with StandardError: StandardError
[Worker(host:ubuntu pid:9912)] 1 jobs processed at 12.9574 j/s, 1 failed
私はエラーコールバックが起こる見ることはありません。しかし、のCTRL + Cでレールサーバを殺すと、エラーコールバックputs
がすぐに出力されます。
カスタム遅延ジョブのエラーコールバックが、サーバーの実行中に実行されないのはなぜですか?
確かに言えませんが、エラーコールバックがうまく機能している可能性が高いです。ほとんどのOSの標準出力(あなたは何を言っていないか)はバッファされています。だから私は、文字列がバッファをフラッシュするサーバーのシャットダウンまでバッファリングされていると確信しています。 STDERR.putsを試してください。ほとんどのOSでは、標準エラーはバッファされません。 – Gene
面白い考え!私はUbuntu 16.04 LTSで動作しています。 – ardavis
'STDERR.puts'を答えに使用することについてのあなたのコメントを移動して、正しいものとしてマークすることができますか?それはまさにそれでした!私が期待した場所に現れている。 – ardavis