Rails console を実行すると Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError) が発生するようになった

brew upgrade を実行したところ、bin/rails console を実行する際にエラーが発生するようになりました。

  • macOS Mojave 10.14
  • Ruby 2.6.1
  • Rails 5.2.2
  • readline 8.0.0

readline のメジャーバージョンが上がって、ライブラリのパスが変わったのが問題だったようです。

% bin/rails c
Traceback (most recent call last):
        42: from bin/rails:4:in `<main>'
        41: from /.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require'
        40: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency'
        39: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require'
        38: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
        37: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
        36: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:83:in `register'
        35: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
        34: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
        33: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/commands.rb:18:in `<main>'
        32: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command.rb:44:in `invoke'
        31: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command.rb:70:in `find_by_namespace'
        30: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command/behavior.rb:79:in `lookup'
        29: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command/behavior.rb:79:in `each'
        28: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command/behavior.rb:80:in `block in lookup'
        27: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command/behavior.rb:80:in `each'
        26: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/command/behavior.rb:84:in `block (2 levels) in lookup'
        25: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require'
        24: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency'
        23: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require'
        22: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
        21: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
        20: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:83:in `register'
        19: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
        18: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
        17: from /path/to/.bundle/gems/railties-5.2.2/lib/rails/commands/console/console_command.rb:4:in `<main>'
        16: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require'
        15: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency'
        14: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require'
        13: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
        12: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
        11: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:83:in `register'
        10: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
         9: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
         8: from /Users/chocoby/.rbenv/versions/2.6.1/lib/ruby/2.6.0/irb/completion.rb:10:in `<main>'
         7: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require'
         6: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency'
         5: from /path/to/.bundle/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require'
         4: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
         3: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
         2: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:83:in `register'
         1: from /path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
/path/to/.bundle/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require': dlopen(/Users/chocoby/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin17/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)
  Referenced from: /Users/chocoby/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin17/readline.bundle
  Reason: image not found - /Users/chocoby/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin17/readline.bundle

調べてみると libreadline.dylib のシンボリックリンクを貼り直すとか、rb-readline gem をインストールするなどの情報がありましたが、 素直に Ruby を再インストールすることで解決できました。

rbenv で Ruby を再インストールする (自分の環境は 2.6.1):

$ rbenv install 2.6.1
rbenv: /Users/chocoby/.rbenv/versions/2.6.1 already exists
continue with installation? (y/N)
ruby-build: use openssl from homebrew
Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...
ruby-build: use readline from homebrew
Installed ruby-2.6.1 to /Users/chocoby/.rbenv/versions/2.6.1

一度 .bundle ディレクトリを全削除 (環境によっては vendor/bundle ディレクトリなど) し、Gem を再インストールする:

% rm -rf .bundle
% bundle install

再度 bin/rails console を実行したところ、Rails console を開けるようになりました。

% bin/rails c
Loading development environment (Rails 5.2.2)
[1] pry(main)>