35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

Sentryで謎のエラーが起きたら外してみると良いかも

みんな大好きSentryだが、そのSentry自体がエラーを吐いて落ちるという珍しい?事態に遭遇したので備忘録がてら書き綴っておく。

何が起きたのか

Rails 7.0から7.1へのアップデート中に、ステージング環境でのみSentryが以下のようなエラーを吐いて落ちるようになった。

/bundle/ruby/3.3.0/gems/sentry-ruby-5.17.3/lib/sentry/utils/
argument_checking_helper.rb:8:in `any?': stack level too deep 
(SystemStackError)

検索しても類似の事例が全く出てこず、どうしたものかと思いながら試しにSentryのGemを取っ払ってみたところ、エラーが変わってあっさり答えが出てきた。

Uglifier::Error: (Uglifier::Error)

このUglifierのエラーに関しては、Uglifierの代わりにTerserを使おうということなので、粛々と置き換えに取り掛かった。

対応内容

Gemfile のUglifierをTerserに置き換える。

- gem 'uglifier'
+ gem 'terser'

staging.rb および production.rb も同様に。

- config.assets.js_compressor = :uglifier
+ config.assets.js_compressor = :terser

おわりに

何でこれでSentryが落ちるんだ…という疑問は残るものの、取り敢えずSentryを外してみればエラーの正体が現出するという知見が得られた。よくよく考えてみれば当然のことではあるが、ぱっと見だと混乱させられるので参考になれば幸いだ。

ところで今回のUglifierのエラーは、ES2020等の新しい構文を使うと出てくるものらしいが、何故Railsのアップデート中に発生したのかはこれもまた疑問が残る。まだまだRuby & Rails力が足りていないと思う今日この頃。