Rails控制台:在`require':无法加载这样的文件 - readline(LoadError)

Flo*_*son 10 ruby console ruby-on-rails readline

我的Rails应用程序中有一些错误,我试图通过发出以下命令来启动Rails控制台:

rails console
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,我总是得到同样的错误:

/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>'
Run Code Online (Sandbox Code Playgroud)

我真的尝试过在网上找到的所有可能的解决方案,因为很多人遇到了同样的错误.不幸的是,似乎没有任何效果.当我尝试以下命令时:

ruby /usr/local/rvm/src/ruby-2.1.1/ext/readline/extconf.rb
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

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 ***
Run Code Online (Sandbox Code Playgroud)

表明缺少某些东西,但使用apt-get安装readline也没有任何区别.我猜它可能与不兼容的gem版本有关,因为控制台前一段时间曾短暂工作过.readline是否存在任何已知版本问题?很多人似乎都遇到过这个宝石的问题.

hun*_*ner 13

尝试rb-readline输入您的Gemfile并检查出来/sf/answers/671708901/


Flo*_*son 6

我终于找到了解决方案。这是几个问题的结合(gem 版本,冲突的 readline 库)。

首先,我重新获取了 readline 库

sudo apt-get install libreadline-dev
Run Code Online (Sandbox Code Playgroud)

然后我卸载了ruby

rvm remove 2.1.1
Run Code Online (Sandbox Code Playgroud)

我再次安装了 ruby

rvm install 2.1.1
Run Code Online (Sandbox Code Playgroud)

我告诉 RVM 使用默认的 (2.1.1) Ruby

rvm use default
Run Code Online (Sandbox Code Playgroud)

我重新安装了 Rails 和 readline

gem install rails
gem install readline
Run Code Online (Sandbox Code Playgroud)

我再次启动控制台时出现错误,但略有不同:

/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>'
Run Code Online (Sandbox Code Playgroud)

所以按照这个说明(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
Run Code Online (Sandbox Code Playgroud)

感谢 Hunterboerner 的帮助!


Edg*_*ega 5

如果您正在运行Rails 4.x,则可能是Spring导致了此问题。

尝试停止春季过程 bundle exec spring stop

然后跑 bundle exec rails c