動機
エラーが起きただけでなく、任意の箇所や、自前の情報を与えてエラー情報をerrbitに通知したい.
方法
Airbrake.notify(exception, opts = {})
メソッドを呼ぶ.
第二引数にrequest.env['action_controller.instance'].airbrake_request_dataを指定するとrackからcallする情報と同様の情報を送信可能.
my_controller.rb
def action_in_my_controller
begin
MyException.new('An error occured')
rescue MyException => e
Airbrake.notify(e, request.env['action_controller.instance'].airbrake_request_data)
end
end
適当に実装すると上のように書ける.
問題1
requestメソッドを使用するので、controller内でないと利用できないのがネック.
モデルや別のレイヤーからrequestを参照する方法は以下の記事が参考になった.
問題2
request.env['action_controller.instance'] がnilじゃないことを確認すること.
以下のようなメソッドを用意しておくと良い.
def airbrake_request(env)
if env['action_controller.instance'].respond_to?(:airbrake_request_data)
env['action_controller.instance'].airbrake_request_data
else
{ rack_env: env }
end
end