当ActionMailer遇到错误时,如何让Delayed_Job通知Airbrake?

Jor*_*ein 12 actionmailer delayed-job ruby-on-rails-3

DelayedJob文档提到了钩子,包括一个错误钩子,但只在自定义Job子类的上下文中.

这个类似的问题(没有答案)说,在邮件程序类中添加相同的钩子不起作用.

有什么诀窍?

更新:

一般来说,我想看看如何为使用object.delay.action()语法触发的作业添加钩子,我没有看到明显的____Job类链接.

rch*_*ier 20

我也在寻找这个问题的解决方案,我找到了这个要点.

我不知道它来自哪里(在谷歌上发现),但好吧,它似乎做得很好,很简单,似乎遵循一个我甚至不知道的DelayedJob的插件系统......

这是一个使用以前的猴子补丁代码部分的轻微改进:

# https://gist.github.com/2223758
# modified

module Delayed
  module Plugins
    class Airbrake < Plugin
      module Notify
        def error(job, error)
          ::Airbrake.notify_or_ignore(
            :error_class   => error.class.name,
            :error_message => "#{error.class.name}: #{error.message}",
            :parameters    => {
              :failed_job => job.inspect,
            }
          )
          super if defined?(super)
        end
      end

      callbacks do |lifecycle|
        lifecycle.before(:invoke_job) do |job|
          payload = job.payload_object
          payload = payload.object if payload.is_a? Delayed::PerformableMethod
          payload.extend Notify
        end
      end
    end
  end
end

Delayed::Worker.plugins << Delayed::Plugins::Airbrake
Run Code Online (Sandbox Code Playgroud)

它将添加错误的消息和有效负载,以便它可以在Airbrake中使用.

  • 我真的很喜欢这种方法.我找不到作为宝石发布的版本,所以感谢分享这个,我把它打包成其他人可以轻松使用的宝石.如果您想要写访问权等,请告诉我!https://github.com/benjaminoakes/delayed-plugins-airbrake (9认同)