2017-05-11 11 views
0

遅れているジョブで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がすぐに出力されます。

カスタム遅延ジョブのエラーコールバックが、サーバーの実行中に実行されないのはなぜですか?

+1

確かに言えませんが、エラーコールバックがうまく機能している可能性が高いです。ほとんどのOSの標準出力(あなたは何を言っていないか)はバッファされています。だから私は、文字列がバッファをフラッシュするサーバーのシャットダウンまでバッファリングされていると確信しています。 STDERR.putsを試してください。ほとんどのOSでは、標準エラーはバッファされません。 – Gene

+0

面白い考え!私はUbuntu 16.04 LTSで動作しています。 – ardavis

+0

'STDERR.puts'を答えに使用することについてのあなたのコメントを移動して、正しいものとしてマークすることができますか?それはまさにそれでした!私が期待した場所に現れている。 – ardavis

答えて

1

エラーコールバックがうまく機能している可能性があります。ほとんどのOSの標準出力はバッファされています。だから私は、文字列がバッファをフラッシュするサーバーのシャットダウンまでバッファリングされていると確信しています。

try STDERR.putsほとんどのOSでは、標準エラーはバッファされません。

+0

ありがとうございました! – ardavis

関連する問題