Railsアプリでエラーが発生し、次のコマンドを発行してRailsコンソールを起動しようとしています:
Rails console
何を試しても、常に同じエラーが発生します。
/usr/local/rvm/rubies/Ruby-2.1.1/lib/Ruby/2.1.0/irb/completion.rb:9:in `require': cannot load such file -- readline (LoadError)
from /usr/local/rvm/rubies/Ruby-2.1.1/lib/Ruby/2.1.0/irb/completion.rb:9:in `<top (required)>'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands/console.rb:3:in `require'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands/console.rb:3:in `<top (required)>'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands.rb:37:in `require'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands.rb:37:in `<top (required)>'
from script/Rails:6:in `require'
from script/Rails:6:in `<main>'
多くの人が同じエラーに遭遇するので、私はネット上で見つけたすべての可能な解決策を実際に試しました。残念ながら、何も機能していないようです。次のコマンドを試すと:
Ruby /usr/local/rvm/src/Ruby-2.1.1/ext/readline/extconf.rb
次の出力が得られます
checking for tgetnum() in -lncurses... yes
checking for readline/readline.h... yes
checking for readline/history.h... yes
checking for readline() in -lreadline... no
checking for readline() in -ledit... no
checking for editline/readline.h... no
*** /usr/local/rvm/src/Ruby-2.1.1/ext/readline/extconf.rb failed ***
何かが足りないことを示していますが、apt-getを使用してreadlineをインストールしても違いはありません。コンソールが少し前に動作したので、互換性のないgemバージョンと関係があるのではないかと思います。 readlineに既知のバージョンの問題はありますか?非常に多くの人がこの宝石で問題に遭遇したようです。
rb-readline
をGemfileに入れて、これをチェックしてみてください https://stackoverflow.com/a/9595841/1905235
私はついに解決策を見つけました。それはいくつかの問題(gemバージョン、競合するreadlineライブラリ)の組み合わせでした。
まず、readlinelibを再フェッチしました
Sudo apt-get install libreadline-dev
次に、Rubyをアンインストールしました
rvm remove 2.1.1
Ruby再インストールしました
rvm install 2.1.1
デフォルト(2.1.1)のRubyを使用するようにRVMに指示しました
rvm use default
Railsとreadlineを再インストールしました
gem install Rails
gem install readline
もう一度コンソールを起動するとエラーが発生しましたが、少し異なります。
/usr/local/rvm/rubies/Ruby-2.1.1/lib/Ruby/2.1.0/irb/completion.rb:9:in `require': /usr/local/lib/libreadline.so.6: undefined symbol: UP - /usr/local/rvm/rubies/Ruby-2.1.1/lib/Ruby/2.1.0/x86_64-linux/readline.so (LoadError)
from /usr/local/rvm/rubies/Ruby-2.1.1/lib/Ruby/2.1.0/irb/completion.rb:9:in `<top (required)>'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands/console.rb:3:in `require'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands/console.rb:3:in `<top (required)>'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands.rb:37:in `require'
from /opt/mammie/web/icosole/vendor/bundle/Ruby/2.1.0/gems/railties-3.1.3/lib/Rails/commands.rb:37:in `<top (required)>'
from script/Rails:6:in `require'
from script/Rails:6:in `<main>'
したがって、この指示に従ってください( http://vkarthickeyan.wordpress.com/2012/02/16/mysql-symbol-lookup-error-usrlocalliblibreadline-so-6-undefined-symbol-up/ )、私はそれを機能させました:
cd /usr/local/lib
mkdir temp
mv libreadline* temp
ldconfig
apt-get update
助けてくれたhunterboernerに感謝します!
Rails 4.xを実行している場合は、 Spring がこの問題を引き起こしている可能性があります。
Springプロセスを停止してみてくださいbundle exec spring stop
次に、bundle exec Rails c
を実行します
これは、readlineのないSolarisマシンでは問題なく機能し、次のように機能する可能性があります。
$ bundle exec irb
irb(main):001:0> require File.expand_path('config/boot')
=> true
irb(main):002:0> require File.expand_path('config/environment')
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /export/home/deploy/recon/shared/bundle/Ruby/1.8/gems/Rails-2.3.18/lib/Rails/gem_dependency.rb:21.
Warning: NLS_LANG is not set. fallback to US7ASCII.
=> true
irb(main):027:0> require 'console_app'
=> true
しばらく前にこの問題が発生しましたが、次のように入力することで解決しました:rvm requirements
そして戻ってきたものをインストールします。これはrvmの古いバージョンであったため、関連性がなくなったようです。