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