Railsガイドにきちんと目を通して新しい知識を得る - Rails アプリケーションのエラー通知編 -

ドキュメントを読み込むのは大事、ということでRailsガイドを頭から読んでいく取り組みをしています。 各章ごとに、(Railsガイドにちゃんと書いてあるのに)知らなかった機能を雑にまとめていきます。

今回は、Rails アプリケーションのエラー通知の章です。

railsguides.jp

サブスクライバの設定

リンクはこちら

例えば以下のように記述をするだけで、エラーをキャッチしてログで「エラーを検知しました」と表示されるのを確認できます。
ポイントとしては、reportというメソッドを持ったクラスのインスタンスsubscribeで登録する、というところです。

# config/initializers/error_subscriber.rb

class ErrorSubscriber
  def report(error, handled:, severity:, context:, source: nil)
    p 'エラーを検知しました'
  end
end

Rails.error.subscribe(ErrorSubscriber.new)

エラーを通知しつつ、握りつぶす

リンクはこちら

例えば上記のサブスクライバを登録した状態で、適当にエラーを発生するコードを混ぜると、reportメソッドの中身は実行されますが、処理は継続されます。

def index
  @books = Book.all
  Rails.error.handle do
    no_exist_method
  end
end
Started GET "/books"
Processing by BooksController#index as HTML
"エラーを検知しました"
...
Completed 200 OK

処理を止めたくはないけど通知はして欲しい時に使えそうですね。