Techioz Blog

Rails Console を起動できません - ファイル「ext/save-history.rb」をロードできません

概要

最近、Rails 7.0.4 アプリケーションを Ruby 2.7.5 から 3.2.2 にアップグレードしました。

すべてが正しく動作しており、サーバーやテストなどを実行できますが、Rails コンソールを起動できません。コンソールを起動すると、次のエラーが表示されます。

/Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': cannot load such file -- /Users/my-user-name/src/ext/save-history.rb (LoadError)

最初はこれが Bootsnap エラーだと思いましたが、config/boot.rb で require ‘bootsnap/setup’ をコメントアウトすると、似たような異なるエラーが表示されます。

/Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/dead_end-1.1.6/lib/dead_end/auto.rb:30:in `require': cannot load such file -- /Users/my-user-name/src/ext/save-history.rb (LoadError)
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/dead_end-1.1.6/lib/dead_end/auto.rb:30:in `require_relative'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb/extend-command.rb:368:in `save_history='
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb/context.rb:137:in `initialize'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb.rb:473:in `new'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb.rb:473:in `initialize'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb.rb:419:in `new'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/3.2.0/irb.rb:419:in `start'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/commands/console/console_command.rb:70:in `start'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/commands/console/console_command.rb:19:in `start'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/commands/console/console_command.rb:102:in `perform'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/command/base.rb:87:in `perform'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/command.rb:48:in `invoke'
    from /Users/my-user-name/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.0.4/lib/rails/commands.rb:18:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

これは、Irb 履歴を保存するためにライブラリをロードしようとする Irb セッションに何らかの問題があるようです。 Rubyをアンインストールして再インストールし、バンドラーを使用してすべてのGemを再インストールしてみましたが、何も変わらないようです。

しかし、何が問題なのかは分かりません。これは Ruby の問題でしょうか、バンドラーの問題でしょうか、Gem の問題でしょうか、それとも OSX の問題でしょうか?

使っています

Heroku にデプロイしたところ、問題なく Heroku コンソールを起動できることは注目に値します。

解決策

おそらくこれは危険な問題になるでしょうが、dead_end gem から移行してみることもできます。

Dead_end gem は syntax_suggest に名前が変更され、ruby3.2 のデフォルトの gem です。名前の変更については、readme セクションを参照してください。アップグレードして役立つかどうかを確認してください。

言及されたファイルは、この PR およびバージョン irb 1.7.2 では削除されました。 IRB をアップグレードすると問題が解決する可能性があります。

gem 'irb', '~> 1.4'

バンドルインストール

これにより問題が解決されるだけでなく、irb は次の Ruby リリースに含まれるのを待っている間に定期的に改善されるため、利益にもなります。

これらの詳細を質問に追加するとよいでしょう