我正在尝试关注使用延迟作业处理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 终止rails服务器,则会立即打印错误回调puts
语句。
为什么服务器运行时自定义延迟作业的错误回调未执行?
答案 0 :(得分:1)
错误回调可能正常工作。大多数操作系统的标准输出都是缓冲的。因此,我非常确定字符串是否被缓冲,直到服务器关闭,这会刷新缓冲区。
试试STDERR.puts
。在大多数操作系统上,标准错误不会被缓冲。