0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-03-07

お仕事で運用している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-rubyloggerに依存)がRailsから利用されるようにすることで、loggerのロードも復活し、事象が解消する。

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

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?