我一直很高兴地使用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应用程序中)

10-07 15:49