みんな大好き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力が足りていないと思う今日この頃。