Impossible d'exécuter «rails console» en raison d'une erreur avec readline

88

Je ne peux pas exécuter à rails consolecause de cette erreur:

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>'

J'ai installé readline via homebrew. J'aimerais continuer à utiliser rbenv au lieu de rvm.

Merci d'avoir lu ma question.

as
la source
La duplication possible de la console
Santhosh

Réponses:

279

J'ai eu le même problème récemment avec homebrew et libreadline.7.x.dylib / libreadline.6.x.dylib

Je l'ai résolu en exécutant:

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

source: https://github.com/rails/rails/issues/26658

Will Clarke
la source
1
Quel hack :) Mais ça marche très bien, pour l'instant: D Merci!
haslo
18
Utiliser des liens symboliques pour inciter le système à utiliser ce qui est en fait un numéro de version différent (majeur!) Est généralement une mauvaise idée. Ce serait bien si quelqu'un de plus compétent pouvait expliquer pourquoi le correctif ci-dessus est sûr.
Pistos
Vous êtes une légende, merci pour cela, @wiz aurait dû vous marquer correct!
Nick Schwaderer
1
Un examen rapide des changements entre libreadline 6.3 et 7.0 ne montre rien qui semble être un changement de rupture, attendez-vous dans les cas où le logiciel peut avoir été basé sur un comportement non documenté ou bogué. Je serais à l'aise d'essayer cette solution à la lumière de cela.
Lyndsy Simon
58

Homebrew est génial, mais de temps en temps, il ne joue pas bien avec certaines des autres pièces mobiles.

Un brew update && brew upgradeimporté libreadline.7.x.dylibtout en supprimant automatiquement libreadline.6.x.dylib, sur lequel le rubis comptait toujours.

Il existe peut-être des moyens plus intelligents de résoudre le problème, mais la force brute a fonctionné pour moi:

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

Ce qui précède suppose la présence de ce rbenv ruby-buildet, bien sûr, bundler; remplacez 2.3.1par la version de ruby ​​que vous utilisez.

Veuillez noter que des problèmes similaires peuvent survenir avec différentes bibliothèques gérées par homebrew ( voir ma propre réponse à cela, par exemple )

Giuseppe
la source
Est-ce que la même chose venait de m'arriver - je me demande s'il n'y a pas un moyen pour Homebrew de remarquer que certaines bibliothèques sont liées à des versions plus anciennes de certaines fournies par Homebrew?
slhck
2
Cela a fonctionné pour moi à El Capitan, avec un gem install bundleraprès l'installation de rbenv.
handwovensole
L'erreur se produira-t-elle lorsque je courrai à brew update && brew upgradenouveau?
Frank Fang
1
@FrankFang, cela peut ou non, et pas seulement pour cette erreur particulière. Chaque fois qu'une brew upgradebibliothèque plus ancienne remplace une bibliothèque plus ancienne par une version plus récente, il y a CERTAINES chances que d'autres programmes de votre système se plaignent.
Giuseppe
26

Je suis sur OSX, ruby2.3.0, rails5. Ajout gem 'rb-readline'à mon Gemfilerésolu ce problème.

Meekohi
la source
1
gem rb-readline a fonctionné pour moi. Je l'ai ajouté au groupe: development,: test - belle solution rapide!
tnum
21

J'ai eu la même erreur avec Ruby 2.1.0 et rails 4.0. Après avoir beaucoup cherché et essayé, finalement ça marche bien :) Voici ce que j'ai fait:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Les autres moyens:

brew update
brew uninstall readline
brew install readline

La commande autolibs forcera RVM à installer toutes les dépendances, vous n'avez donc pas à vous en préoccuper.

J'espère que c'est utile.

Hoa Hoang
la source
2
vous n'en aurez peut-être pas besoin cleanup rvm. juste reinstallla version rubis.
Échange
20

Comme Sachin l'a laissé entendre, installer readline puis réinstaller ruby ​​est l'approche idéale - mais les détails sont un peu différents pour rbenv. Compte tenu de vos chemins de fichiers, je suppose que vous êtes sur un Mac, donc ce qui suit devrait vous aider:

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

Ceci a été tiré du Wiki de compilation ruby et d'une recherche rapide sur Google.

tapoter
la source
n'oubliez pas de répéter après avoir fait cela
iGbanam
2
Après avoir réinstallé une version Ruby existante avec readline, l'exécution d'une commande telle que bundle installm'a montré de nombreux avertissements comme «Ignorer bcrypt-3.1.11 car ses extensions ne sont pas construites». Comme suggéré dans les réponses à cette question , gem pristine --allcorrige toutes ces erreurs en même temps.
Rory O'Kane
8

En utilisant mac, El Captainversion, il est possible de réparer simplement en faisant

rvm reinstall your_ruby_version

(comme rvm reinstall ruby-2.3.1)

En espérant que ça aide, bonne chance!

violentr
la source
C'était tout ce que j'avais à faire.
Pistos
Cela réinstalle votre version actuelle:rvm reinstall $(rvm current)
CTS_AE
C'est la solution la plus simple, mais la réinstallation prend un certain temps. Pourtant, meilleure approche à mon humble avis.
f055
1

tiré de l'utilisateur github @enderahmetyurt (c'est la seule solution qui a fonctionné pour moi).

Solution: ajoutez gem 'rb-readline'à votre Gemfile dans le groupe de développement et installez l'ensemble .

C'est la solution la plus simple pour les erreurs stupides de "readline".

whataboutme1
la source
0

essayez d'installer readline et réinstallez votre ruby

https://rvm.io/packages/readline/

Sachin Singh
la source
merci d'avoir répondu, mais y a-t-il un moyen de continuer à utiliser rbenv au lieu de rvm?
wiz