don-bra.co

さいきんはphpとたわむれてます

rails consoleしてLibrary not loaded: libreadline.6.dylib (LoadError)が表示されるとき

環境

  • OSX (El Capitan)
  • ruby 2.3.1
  • rails5.0.1
  • Homebrew 1.1.5

とりあえず解決策

brew info readline して readline があることを確かめたら
gem 'rb-readline' をGemfileに追加しましょう。

現象

rails5.0.1で rails console しました。
途中でこけてエラーメッセージが出たりするとよいのですが、何も反応が返ってこずコンソールにも何も表示されませんでした。
とりあえずこういうときはおもむろに bin/spring stop します。

そのあともう一度 rails c すると以下のエラーが出ました。(適宜パスは読み替えてください)

Running via Spring preloader in process XXXX
path/to/project/vendor/bundle/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require': dlopen(~/.anyenv/envs/rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib (LoadError)
Referenced from: ~/.anyenv/envs/rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle
Reason: image not found - ~/.anyenv/envs/rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle

なんだかreadlineの読み込みに失敗しているようですね。

brew info readline してみたのですがreadlineはインストールされています。
シンボリックリンク貼ったらいいのかなーと思ったのですが、違うマシンでもまたシンボリックリンク貼ったりを考えると面倒だなあと思って別の方法を模索しました。ほんとはインフラも仮想化するべきなんです・・・

解決策

stackoverflowをぽちぽち見ているとどうやらgemを入れるだけで解決しそうでした。
gem 'rb-readline' をdevelopmentに追加して bundle install したあとに bundle exec rails c してみると

Loading development environment (Rails 5.0.1)
irb(main):001:0>

わーい! Hello irb ? 解決です!

ちなみにおなじマシンの違うプロジェクトで bundle exec rails console してもすんなりいったんですよね。
railsのバージョン(正確に言うとSpringのバージョン)が違うのが原因のようです。

参考リンク

ruby - how to install "readline" for rails console - Stack Overflow

ruby on rails console hanging when loading - Stack Overflow