Rails7.0アンインストール後「uninitialized constant」エラー発生

お仕事で運用しているRedmineのメンテナンス中に発生した問題です。

# Problem

Ruby on Railsの複数バージョン混在環境で、脆弱性のあるバージョンがインストールされていることがわかり、Railsのうち当該バージョンのみアンインストールを行った。

* インストール済バージョン： 4系、6系、7系
* アンインストール対象バージョン：　4系、7系

その後 `rails -v`コマンドを実行すると `uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)`というエラーが発生するようになった。

```
/usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/logger_thread_safe_level.rb:16:in `<module:LoggerThreadSafeLevel>': uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)

    Logger::Severity.constants.each do |severity|
    ^^^^^^
from /usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/logger_thread_safe_level.rb:9:in `<module:ActiveSupport>'
from /usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/logger_thread_safe_level.rb:8:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/logger_silence.rb:5:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/logger.rb:3:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support.rb:29:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/command.rb:3:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/cli.rb:12:in `<top (required)>'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/exe/rails:10:in `<top (required)>'
from /usr/local/bin/rails:25:in `load'
from /usr/local/bin/rails:25:in `<main>'
```

# Solution

`gem list`コマンドでインストール済のGemの一覧を取得、`concurrent-ruby` のv1.3.5以上が存在するかチェック。
もし存在したらアンインストールする。

原因はだいたいこういうことらしい： Ruby on Railsが依存する`concurrent-ruby`。このGemはv1.3.5より前は `logger`に依存していたが、v1.3.5以降は依存しなくなった。これにより`logger`がロードされなくなったが、Rails自体は引き続きこれを必要としている。とくに今回アンインストールせずに残した6系は必要としている。
結果、`rails`コマンド等の処理で`logger`を参照するコードが実行されるとエラーが発生する。

`concurrent-ruby`のv1.3.5をアンインストールし、同環境にインストール済のより古いバージョンの`concurrent-ruby`（`logger`に依存）がRailsから利用されるようにすることで、`logger`のロードも復活し、事象が解消する。

この問題について報告しているStackOverflowの投稿：

https://stackoverflow.com/questions/79360526/uninitialized-constant-activesupportloggerthreadsafelevellogger-nameerror