由于libreadline,rails控制台无法加载


73

我最近像这样重新安装了ruby 2.1.2,因为我想安装gem(ruby-debug-ide

sudo rvm reinstall 2.1.2 --disable-binary --with-gcc=gcc-4.2

从那时起,bundle exec rails c 由于以下错误,我无法使用加载控制台:

/Users/ohad/.rvm/gems/ruby-2.1.2@aaa/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require': dlopen(/Users/ohad/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle, 9): Library not loaded: @@HOMEBREW_PREFIX@@/opt/readline/lib/libreadline.6.dylib (LoadError)
  Referenced from: /Users/ohad/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle

尝试过brew uninstall readlinebrew install --build-from-source readline哪个可行,但不能解决我的问题。


Answers:


80

今天解决这个问题,我做到了:

brew rm -f readline

brew install readline

brew link readline --force

希望能帮助到你。

编辑:自从我写这篇文章以来,我最近再次遇到了这个问题(降级Ruby之后),现在我从以下注释中更喜欢@califrench的解决方案:

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


1
也为我工作,谢谢!虽然在运行brew doctor时告诉我取消链接?我认为那是导致错误首先出现的原因,很奇怪..
ggrillone 2014年

161
对我来说cp /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib,绝招。看起来Rails 4.2.6正在寻找libreadline.6而不是libreadline。老实说,我可能应该把它链接起来。所以ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib比较合适。希望这对仍陷于困境的人有所帮助!
califrench '16

5
我发现@califrench的解决方案rails c在升级到Sierra后被破坏后可以正常工作。
Doug Thompson

不知道为什么今天早上突然开始发生这种情况,但是当其他人都不做时,califrench的解决方案对我有用....谢谢!
艾伦·麦克斯韦

1
感谢@ califrench,OP的答案对我不起作用,但评论却对我有用。可能希望将其发布为答案:)
Ganesh Hegde

77

基于对已接受答案的评论,其投票数比答案多,这似乎是最受欢迎的解决方案。

看起来是Rails 4.2.6正在寻找libreadline.6而不是libreadline。所以只需要创建一个符号链接。

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

希望这可以帮助仍然陷于困境的其他人!


3
感谢您发布我的解决方案。我已经收到了很好的反馈,并准备将其发布。我投票赞成!
califrench

@califrench,这是一个社区Wiki,请根据需要进行一些编辑以使其变得更好,然后您也将被添加为贡献者。(在这里看不到您的名字有点不公平!)
TᴀʀᴇǫMᴀʜᴍᴏᴏᴅ17年

也解决了我的问题!我正在使用Rails v4.2.4。谢谢!
Abundnce17年

感谢Califrench和Tareq!我对这个答案投了赞成票,但对排名中排名靠前的答案投了反对票(但没有帮助)。不幸的是,我没有足够的代表来更改公开总数。希望未来的读者也能投类似的票。
JDenman6 '18年

5
谢谢,这有效!就我而言,只需更改...libreadline.6.dylib...libreadline.7.dylib
Ryan Rebo,

51

通过重新安装Ruby,我能够解决相同的问题。在Homebrew方面,重新安装readline(甚至来自源代码)也无济于事。

我正在使用RVM,因此对我进行了排序:

rvm reinstall 2.3.1

我认为Homebrew最近可能已经将readline v7用于其他软件包,我怀疑这很可能是罪魁祸首。


14
谢谢-已经解决了。对于rbenv用户,rbenv等效项是rbenv install -f 2.3.1
约翰Y

1
同样在这里!重新安装2.3.1为我修复了它。
cabgfx16年

在终端中工作时,我没有遇到这个问题,仅在RubyMine(???)中工作。并重新安装修复它(???)。
富兰克林·于

我见过RubyMine SDK指向过期/错误的RVM gemset的情况。最典型的是当我升级全局默认Ruby版本时。我建议您检查一下SDK
爪子

在运行ChefDK的裁刀命令时遇到了问题,并对此进行了修复。
WhyAyala

17

在收到对我对@mauro_oto的帖子的评论的正面反馈后,我认为我应该将其发布为答案:

对我来说cp /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib,绝招。看起来Rails 4.2.6正在寻找libreadline.6而不是libreadline。老实说,我可能应该把它链接起来。所以ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib比较合适。希望这对仍陷于困境的人有所帮助!



9

所有这些都不适合我。我正在使用osx sierra。这对我有用。

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

希望这可以帮助某人。


6

我的ENV:Ruby:2.2.1,Rails:4.2.1,macOS Sierra 10.12.4;

以下命令适用于我和我的同事:

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


5

这解决了我的问题:

将libreadline。{version} .dylib替换为错误的版本:

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

这就是答案
dowi

2

在使用自制软件的OSX上,您可以指定哪个readline版本处于活动状态。例如

brew switch readline 6.3.8

(可能安装在中/usr/local/Cellar/readline/


2

我遇到了类似的问题,但是版本更新了。我的错误是:

dlopen(/Users/juanjo/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/x86_64-darwin18/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)
  Referenced from: /Users/juanjo/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/x86_64-darwin18/readline.bundle
  Reason: image not found - /Users/juanjo/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/x86_64-darwin18/readline.bundle

重要的部分是 Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib

看着/usr/local/opt/readline/lib/我看到我已经安装了libreadline.8.dylib,而不是7。

为了解决我的问题,在其他答案的指导下,我必须执行以下操作:

ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib

换句话说: ln -s /.../[libreadline you have] /.../[libreadline you need]

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.