readline出了什么问题?

12

我使用不同的操作系统和Rails 3和4共设置了三次Rails环境。一切进行得很顺利,直到我打开控制台键入一些Ruby代码,或者使用rails consolerails dbconsole检查我的数据库时。这时会出现类似以下的错误:

$ rails console
/home/tobias/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/completion.rb:9:in       `require': no such file to load -- readline (LoadError)
from /home/tobias/.rvm/rubies/ruby-1.9.2-p18080/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands/console.rb:3:in `require'
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gemsems/railties-3.0.9/lib/rails/commands/console.rb:3:in `<top (required)>'
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands.commandsrb:20:in `require'
from /home/tobias/.rvm/gems/ruby-1.9.2-p180/gems/railsilties-3.0.9/lib/rails/commands.rb:20:in `<top (required)>'
from scriptt/rails:6:in `require'
from script/rails:6:in `<main>'

这篇文章来自于"为 Ruby on Rails 控制台修复 readline"。它帮我解决了两次问题。

现在我正在使用 Rails 4 和 Ruby 2,一切进行得很顺利,直到:

mto@mto-mint-vm ~/src/rpg $ rails console
/home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/completion.rb:9:in `require': /usr/local/lib/libreadline.so.6: undefined symbol: UP - /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/x86_64-linux/readline.so (LoadError)
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/completion.rb:9:in `<top (required)>'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:3:in `require'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:3:in `<top (required)>'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:53:in `require'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:53:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

这次博客没有帮到我。Stackoverflow上有相关的问题:

最后一个建议在我的gemfile中添加gem 'rb-readline'。我添加了这行代码,运行bundle install,然后得到了这个:

mto@mto-mint-vm ~/src/rpg $ rails console
Loading development environment (Rails 4.0.0)
/home/mto/.rvm/scripts/irbrc.rb:30:in `block in <top (required)>': uninitialized constant Readline (NameError)
/home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/input-method.rb:150:in `gets': uninitialized constant IRB::ReadlineInputMethod::Readline (NameError)
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:472:in `block (2 levels) in eval_input'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:624:in `signal_status'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:471:in `block in eval_input'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:190:in `call'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:190:in `buf_input'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:105:in `getc'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/slex.rb:206:in `match_io'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/slex.rb:76:in `match'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:290:in `token'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:266:in `lex'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:237:in `block (2 levels) in each_top_level_statement'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `loop'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `catch'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `each_top_level_statement'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:488:in `eval_input'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:397:in `block in start'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:396:in `catch'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/irb.rb:396:in `start'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
    from /home/mto/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'
"Rails 3: uninitialized constant IRB::ReadlineInputMethod::Readline (NameError) in Heroku"的问题通过将gem绑定到版本0.4.2来解决。我之前使用的是0.5.0。
为什么一个简单的库,它在Rails和Ruby中都有如此核心的位置,会引起这么多的痛苦?有没有任何办法使这更容易?
这只是一个用于从控制台读取行的库,对吧?在上面的示例中出了什么问题?我想知道为什么,而不是是什么以及如何解决。"

2
请为rvm(https://github.com/wayneeseguin/rvm/issues)报告错误 - 这应该通过autolibs安装适当的库/头文件来处理 - 但需要进行一些调试以确保其正常工作。 - mpapis
我在一个服务器上遇到了同样的问题,但在另一个服务器上没有出现这个问题。唯一的区别是我看到的rbenv版本不同,rbenv 0.4.0-74-g95a039a可以正常运行而不需要rb-readline宝石解决方法,而带有rbenv 0.4.0-75-gbe5e1a的版本无法工作。像@deepender-singla所说的那样,在我的Gemfile中添加宝石rb-radline v0.4.2就解决了问题。 - fguillen
2个回答

8
你可以这样做,我成功了:

你可以这样做,我成功了:

gem install rb-readline

并在您项目的Gemfile中添加以下行:

gem 'rb-readline', '~> 0.4.2'

我将锁定gem的版本,因为更新的版本会有一些错误。

谢谢回答。不过我不会接受它,因为它没有回答为什么在0.5版本中无法工作,或者是否有人正在努力解决这个问题。 我的主要观点是这样一个中央库应该开箱即用。 - toftis
好的,我明白了。我想也许你可以在这段时间内使用它,以免影响你的工作。 - Deepender Singla
@Magne,您能在此详细描述问题吗?我会尽力回答。谢谢。 - Deepender Singla
经过一番来回尝试,我通过运行 gem uninstall rb-readline 并且只在我的 Gemfile 中使用 gem 'rb-readline',然后运行 bundle install,最终让它正常工作了。这将安装 rb-readline 版本 0.5.1,据说已经解决了该 bug。 - Magne
感谢您的愿意协助,@DeependerSingla :) - Magne

1
上述答案很好。可以选择系统范围内安装gem。
gem install rb-readline

或者将上述 gem 添加到您的项目 Gemfile 中。
gem 'rb-readline'

但是,如果你们不想在Gemfile中包含任何额外的gem,并且已经通过源文件下载了Ruby,则可以按照以下步骤操作:

sudo apt-get install libreadline-gplv2-dev libncurses5-dev
cd ~/.rvm/src/ruby-1.9.2-p180/
make clean
cd ~/.rvm/src/ruby-1.9.2-p180/ext/readline
ruby extconf.rb
cd ~/.rvm/src/ruby-1.9.2-p180/
make
make install

如果需要,使用sudo :)。希望这有所帮助 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接