sentry-ravenからsentry-ruby移行時に気をつけること
今まで Rails アプリケーションの Sentry クライアントとしてsentry-ravenという Gem を使わせてもらってました。
そのsentry-ravenがメンテナンスモードになったため、最近sentry-rubyに移行しました。
移行自体はドキュメントの通りに進めればそこまで大変ではないのですが、1 点ドキュメントには書いてない点で気をつけたほうがいいことがあったので共有できればと思います(正確には元々の使い方が悪かっただけなのですが...)。
capture_exception と capture_message の引数を見直そう
例えば移行前に下記のようなコードがあったとします。
begin
1 / 0
rescue ZeroDivisionError => e
Raven.capture_message(e)
end
上記のコードでエラーは出ないのですが、移行してRaven.capture_message(e) から Sentry.capture_message(e)に変更するとエラーが発生してしまいます。
ArgumentError: expect the argument to be a String, got ZeroDivisionError (#<ZeroDivisionError: divided by 0>)
sentry-raven では capture_exception と capture_message がエイリアスメソッドだった
そもそもcapture_messageは Sentry にテキスト情報を送るメソッドなので引数に文字列を指定しないといけません。
ではなぜRaven.capture_message(e)は引数に文字列を指定しなくても実行できていたのだろうと調べてると、
どうやらcapture_exceptionとcapture_messageは両方capture_typeのエイリアスメソッドだったため実行できたようです。
capture_messageの引数が文字列ではなくてもcapture_exceptionの方の引数として解釈され、capture_exceptionメソッドとして動いていたみたいですね。
ではsentry-rubyではどうかというと、見た感じそれぞれ別個のメソッドとして独立していました。
なので移行した時にエラーが起きたと思われます。
もしこれからsentry-ravenからsentry-rubyに移行する方がいましたら、お気をつけくださいー!
Discussion