私もこの問題の解決策を探していたところ、この要点を見つけました。
どこから来たのかはわかりませんが(Googleで見つけました)、まあ、うまく機能しているようで、非常にシンプルで、私が知らなかった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
エラーのメッセージとペイロードを追加して、Airbrake で使用できるようにします。