web-dev-qa-db-ja.com

Rails console:in `require ':そのようなファイルをロードできません--readline(LoadError)

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に既知のバージョンの問題はありますか?非常に多くの人がこの宝石で問題に遭遇したようです。

10
Flock Dawson

rb-readlineをGemfileに入れて、これをチェックしてみてください https://stackoverflow.com/a/9595841/1905235

12
hunterboerner

私はついに解決策を見つけました。それはいくつかの問題(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に感謝します!

4
Flock Dawson

Rails 4.xを実行している場合は、 Spring がこの問題を引き起こしている可能性があります。

Springプロセスを停止してみてくださいbundle exec spring stop

次に、bundle exec Rails cを実行します

3
Edgar Ortega

これは、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
1
Carl

しばらく前にこの問題が発生しましたが、次のように入力することで解決しました:rvm requirementsそして戻ってきたものをインストールします。これはrvmの古いバージョンであったため、関連性がなくなったようです。

1
Yule