我一直很高兴地使用DelayedJob惯用语:
foo.send_later(:bar)
这将在DelayedJob进程中调用对象foo上的方法栏。
而且我一直在使用DaemonSpawn在服务器上启动DelayedJob进程。
但是...如果foo引发异常,则Hoptoad不会捕获该异常。
这是这些软件包中的任何一个是否有错误……还是我需要更改某些配置……还是需要在DS或DJ中插入一些将调用Hoptoad通知程序的异常处理?
针对下面的第一条评论。
class DelayedJobWorker < DaemonSpawn::Base
def start(args)
ENV['RAILS_ENV'] ||= args.first || 'development'
Dir.chdir RAILS_ROOT
require File.join('config', 'environment')
Delayed::Worker.new.start
end
最佳答案
尝试Monkeypatching Delayed::Worker#handle_failed_job:
# lib/delayed_job_airbrake.rb
module Delayed
class Worker
protected
def handle_failed_job_with_airbrake(job, error)
say "Delayed job failed -- logging to Airbrake"
HoptoadNotifier.notify(error)
handle_failed_job_without_airbrake(job, error)
end
alias_method_chain :handle_failed_job, :airbrake
end
end
这对我有用。
(在使用delay_job 2.1.4和hoptoad_notifier 2.4.11的Rails 3.0.10应用程序中)