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
聲明。
爲什麼在定製延遲作業錯誤回調的服務器運行時沒有執行?
不能肯定地說,但很有可能是錯誤回調是工作的罰款。大多數操作系統的標準輸出(你沒有說哪個)被緩衝。所以我很確定字符串被緩衝,直到服務器關閉,刷新緩衝區。嘗試STDERR.puts。在大多數操作系統中,標準錯誤不會被緩衝。 – Gene
有趣的思想!我在Ubuntu 16.04 LTS上運行。 – ardavis
您能否將您關於使用'STDERR.puts'的評論移至答案中,以便將其標記爲正確?這就是它!它顯示了我的預期。 – ardavis