Baby steps to migratory bird

元半導体系エンジニア、今Webエンジニアの雑記

PostgreSQLのバージョンを上げたらRails consoleが開かなくなった時の対処メモ

色々アップデートしてたらRails consoleが開かなくなり対処したのでそのメモです。

>bin/rails c

(Traceback省略)

/Users/(ユーザー名)/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require': dlopen(/Users/(ユーザー名)/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/x86_64-darwin16/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)
  Referenced from: /Users/(ユーザー名)/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/x86_64-darwin16/readline.bundle
  Reason: image not found - /Users/(ユーザー名)/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/x86_64-darwin16/readline.bundle

エラーをみると/usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)あたりが怪しそうなのでググってみると出てきたのが以下↓

github.com (即効でRailsのissueじゃねぇ!ってクローズされてて吹いたw)

リンク先だといくつか対処法が書いてあるので整理します。 結論としては1が良いのかなと思います。

0. 開発環境

  • macOS sierra (10.12.6)
  • Rails 5.2.2
  • Ruby 2.5.1 (rbenv)

1. シンボリックリンクを作成する(し直す?)

2019/3/2時点だとこれでいけました。

ln -s /usr/local/opt/readline/lib/libreadline.8.0.dylib /usr/loc al/opt/readline/lib/libreadline.7.dylib

下記記事とHomebrewのサイトを見てみると、 最近PostgreSQLのバージョンを上げた影響でreadlineのバージョンも上がったため、

(原因)readline 7を読みに行ったが対象がない

(事象)LoadError

(対処)元の呼び出しでもreadline 8.0を呼び出せるようにシンボリックリンクを作成する。

という流れになったのだと予想。

thinkami.hatenablog.com

formulae.brew.sh

ちなみにシンボリックリンクとは?

www.itsenka.com

ln -s hoge fugaの意味について

http://www.turbolinux.co.jp/products/server/10s/manual/command_guide/command_guide/ln.html

ln の引数の順番で迷わなくなった - Qiita

2. rb-readlin gemを入れる

rb-readline gem

これでも一応動くようになりましたが、最近メンテされてないし。。

3. rbenv (またはrvm) を入れ直す

今回は試してないが、入れ直す時にリンクが作成されるのでは?と予想

まとめ

他にもバージョン上げた時に応用効きそう