LoginSignup
4
0

More than 1 year has passed since last update.

ピュアなruby環境でsentry-rubyが動作しないときの備忘録

Last updated at Posted at 2021-08-22

あんまりいないと思うけど、RailsとかSinatoraとかを使っていない純粋なruby環境でSentryを使ったときに沼った。
そのときの備忘録を残す。

環境

Gemは単純にsentry-rubyを指定するだけ
バージョンは、最新の4.6.5だったけど、多分関係ない

Gemfile
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "2.7.4"

...
gem "sentry-ruby"
...

コードは公式のサンプル通り

sample.rb
require "sentry-ruby"

Sentry.init do |config|
  config.dsn = '__MY_DSN__'
end

begin
  1 / 0
rescue ZeroDivisionError => exception
  puts exception
  Sentry.capture_exception(exception)
end

エラー内容

エラー内容がSentryに通知されない

原因

デフォルトの挙動だと、バックグラウンドのスレッドでSentryがエラーを送信しているが、プロセスが終了すると、それに引きづられて、スレッドも終了する
そのため、エラーが送信される前にプロセスが終了するとエラーが送信されない。
…ような気がする
https://docs.sentry.io/platforms/ruby/configuration/options/#optional-settings

解決策

公式が言っているようにActiveJobsみたいなバックグラウンドジョブを利用するか、
下記のように、スレッド数を0に指定して、同期的に動作するようにする

Sentry.init do |config|
  config.dsn = '__MY_DSN__'
  config.background_worker_threads = 0
end

…というかドキュメント見ればちゃんと書いてあった。
よく読まんとな

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0