Rails アプリケーションの Ruby 3.0 対応を裏ではじめている頃合いだと思うのですが、Ruby 3.0.0-dev (2020-10-21T09:10:14Z を使っていたけれど preview1 でも同様かも?) を使った Active Record Session Store で以下のエラーが起きた際のメモを書いておきます。
Failure/Error: super RuntimeError: class variable @@silencer of ActiveSupport::Logger is overtaken by Logger
これは ActiveRecord::SessionStore::Session.logger.silence_logger
を使っている場合に起きるエラーです。
本対応としては Active Record Session Store 本体への PR が既に取り込まれていましたが、このエントリを書いている時点ではまだリリースまではされていません。
未リリースのパッチを適用するひとつの方法としては Gemfile で以下のような対応をしておきます。
-gem 'activerecord-session_store' +# Use `github` option until the following patch is released. +# https://github.com/rails/activerecord-session_store/pull/159 +gem 'activerecord-session_store', github: 'rails/activerecord-session_store', ref: 'f188efbc'
より堅実に fork 指定をしておきたい場合は、以下のエントリで引用している sue445 さんのコメントを参考にしてください。
あとはソースコードで silence_logger
となっている箇所を silence
にすれば Ruby 2.7 系以前の Rails アプリケーション互換で解決すると思います。
- ActiveRecord::SessionStore::Session.logger.silence_logger do + ActiveRecord::SessionStore::Session.logger.silencer do
冒頭のエラーログによって Google 検索でシュッと見つけられると便利な人がいるかもしれないので書き残しておきました。
2020年11月11日追記
調査できていませんが、ActiveRecord::SessionStore::Session.logger.silencer
のブロックが期待通り処理されていない可能性があるので、おかしそうな動きがあれば upstream のリポジトリへのレポートやパッチなどしましょう。