由于readline错误导致无法执行“ rails console”


88

rails console由于此错误,我无法执行:

localhost:TwitterForZombies wiz$ rails c
/Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/irb/completion.rb:9:in `require': dlopen(/Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib (LoadError)
  Referenced from: /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle
  Reason: image not found - /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands/console.rb:3:in `require'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands/console.rb:3:in `<top (required)>'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:38:in `require'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:38:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我已经通过自制软件安装了readline。我想继续使用rbenv而不是rvm。

感谢您阅读我的问题。


Answers:


279

我最近在自制软件和libreadline.7.x.dylib / libreadline.6.x.dylib中遇到了同样的问题

我通过运行解决了它:

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib

来源:https : //github.com/rails/rails/issues/26658


1
真是个骇客:)但是,现在就可以了:D谢谢!
haslo

18
使用符号链接诱使系统使用实际上是不同的(主要!)版本号通常是一个坏主意。如果知识渊博的人可以解释为什么上述修复是安全的,那将是很好的。
Pistos

您是传奇人物,谢谢您,@ wiz应该标记为您正确!
尼克·施瓦德勒

1
粗略回顾libreadline 6.3和7.0之间的更改并没有显示任何似乎是重大更改,在软件可能一直依赖未记录的或错误的行为的情况下,这种情况是可以预期的。鉴于此,我很乐意尝试此解决方案。
Lyndsy Simon

58

自制软件很棒,但是有时它不能与其他一些活动部件配合使用。

红宝石仍在依赖时自动brew update && brew upgrade引入的一个引入。libreadline.7.x.dyliblibreadline.6.x.dylib

可能有更聪明的方法来解决问题,但蛮力对我有用:

$ rbenv uninstall 2.3.1
$ rbenv install 2.3.1
$ cd /path/to/my/app
$ bundle

以上假设存在rbenv ruby-build,当然bundler;替换2.3.1为您使用的任何版本的红宝石。

请注意,不同的自制软件管理的库可能发生类似的问题(例如,请参阅我对此的回答


我是否也遇到了同样的情况-我想知道Homebrew是否没有办法注意到某些库链接到Homebrew提供的某些库的旧版本?
slhck

2
gem install bundler在rbenv安装完成后,这在El Capitan对我有用。
handwovensole

brew update && brew upgrade再次运行时会发生错误吗?
Frank Fang

1
@FrankFang,它可能会或可能不会,而不仅是针对此特定错误。每次brew upgrade用一个较新的版本替换任何较早的库时,系统中的其他程序都有机会抱怨。
朱塞佩

26

我在OSX,ruby2.3.​​0,rails5上。添加gem 'rb-readline'到我Gemfile解决这个问题。


1
gem rb-readline为我工作。我将其添加到:development,:test组-快速修复!
tnum

21

我在Ruby 2.1.0和Rails 4.0中遇到了相同的错误。经过搜索并尝试了很多之后,终于可以正常使用了:)这是我所做的:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

其他方式:

brew update
brew uninstall readline
brew install readline

autolibs命令将强制RVM安装所有依赖项,因此您无需担心。

希望对您有所帮助。


2
您可能不需要cleanup rvm。只是reinstall红宝石版本。
互换

20

正如Sachin所暗示的那样,安装readline然后重新安装ruby是理想的方法-但是rbenv的细节有些不同。给定您的文件路径,我猜您在Mac上,因此以下内容应会有所帮助:

brew install readline ruby-build
env CONFIGURE_OPTS=--with-readline-dir=`brew --prefix readline` rbenv install 1.9.3-p286

这是从ruby-build Wiki和一个快速的Google搜索中获取的。


完成此操作后不要忘记重新
哈希处理

2
重新安装带有readline的现有Ruby版本后,运行诸如这样的命令,会bundle install向我显示许多警告,例如“忽略bcrypt-3.1.11,因为未构建其扩展名”。如该问题答案中所建议,请立即gem pristine --all修复所有这些错误。
罗里·奥肯

8

使用mac El Captain版本,仅需执行以下操作即可修复

rvm reinstall your_ruby_version

(如rvm reinstall ruby-2.3.1

希望这有帮助,祝你好运!


这就是我要做的。
Pistos

这将重新安装您的当前版本:rvm reinstall $(rvm current)
CTS_AE,

这是最简单的解决方案,但需要一些时间才能重新安装。尽管如此,最好的方法恕我直言。
f055

1

取自github用户@enderahmetyurt(这是唯一对我有用的解决方案)。

解决方案:添加gem 'rb-readline'开发组中的Gemfile 并捆绑安装

这是解决“读取行”错误的最简单解决方案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.