2017-05-11 44 views
0

我試圖按照this guide有關處理與延遲招聘API速率限制。爲什麼延遲作業錯誤回調不會執行?

這裏是我的工作:

# 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 +ç然後它立即打印錯誤回調puts聲明。

爲什麼在定製延遲作業錯誤回調的服務器運行時沒有執行?

+1

不能肯定地說,但很有可能是錯誤回調是工作的罰款。大多數操作系統的標準輸出(你沒有說哪個)被緩衝。所以我很確定字符串被緩衝,直到服務器關閉,刷新緩衝區。嘗試STDERR.puts。在大多數操作系統中,標準錯誤不會被緩衝。 – Gene

+0

有趣的思想!我在Ubuntu 16.04 LTS上運行。 – ardavis

+0

您能否將您關於使用'STDERR.puts'的評論移至答案中,以便將其標記爲正確?這就是它!它顯示了我的預期。 – ardavis

回答

1

這可能是錯誤回調是工作的罰款。大多數操作系統的標準輸出被緩衝。所以我很確定字符串被緩衝,直到服務器關閉,刷新緩衝區。

嘗試STDERR.puts。在大多數操作系統中,標準錯誤不會被緩衝。

+0

非常感謝! – ardavis