【发布时间】:2017-10-09 19:37:43
【问题描述】:
我正在尝试关注 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
这是我安装的可能相关的 gem。我正在使用 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 语句。
为什么自定义延迟作业的错误回调在服务器运行时不执行?
【问题讨论】:
-
不能肯定地说,但很可能错误回调工作正常。大多数操作系统的标准输出(你没有说哪个)被缓冲。所以我很确定字符串正在被缓冲,直到服务器关闭,这会刷新缓冲区。试试 STDERR.puts。在大多数操作系统上,标准错误不会被缓冲。
-
有趣的想法!我在 Ubuntu 16.04 LTS 上运行。
-
您能否将您对使用
STDERR.puts的评论移至答案中,以便我将其标记为正确?就是这样!它出现在我预期的地方。 -
好的。很高兴就是这样。
标签: ruby-on-rails ruby-on-rails-3 delayed-job