"Rails Console" kann aufgrund eines Fehlers mit readline nicht ausgeführt werden

88

Ich kann rails consoleaufgrund dieses Fehlers nicht ausführen :

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

Ich habe readline via homebrew installiert. Ich würde gerne weiterhin rbenv anstelle von rvm verwenden.

Vielen Dank für das Lesen meiner Frage.

wiz
quelle

Antworten:

279

Ich hatte kürzlich das gleiche Problem mit Homebrew und libreadline.7.x.dylib / libreadline.6.x.dylib

Ich habe es gelöst, indem ich ausgeführt habe:

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

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

Will Clarke
quelle
1
Was für ein Hack :) Aber es funktioniert vorerst ganz gut: D Danke!
Haslo
18
Die Verwendung von Symlinks, um das System dazu zu bringen, eine andere (Haupt-!) Versionsnummer zu verwenden, ist im Allgemeinen eine schlechte Idee. Es wäre gut, wenn jemand, der besser informiert ist, erklären könnte, warum das oben genannte Update sicher ist.
Pistos
Du bist eine Legende, danke dafür, @wiz hätte dich richtig markieren sollen!
Nick Schwaderer
1
Eine flüchtige Überprüfung der Änderungen zwischen libreadline 6.3 und 7.0 zeigt nichts, was als bahnbrechende Änderung erscheint. Erwarten Sie dies in Fällen, in denen sich Software möglicherweise auf undokumentiertes oder fehlerhaftes Verhalten verlassen hat. Vor diesem Hintergrund würde ich diese Lösung gerne ausprobieren.
Lyndsy Simon
58

Homebrew ist großartig, aber hin und wieder spielt es sich nicht gut mit einigen anderen beweglichen Teilen.

Ein brew update && brew upgradeeingebrachte libreadline.7.x.dylibbeim automatischen Entfernen libreadline.6.x.dylib, auf den sich Rubin noch stützte.

Es gibt vielleicht klügere Möglichkeiten, das Problem zu beheben, aber Brute Force hat bei mir funktioniert:

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

Das Obige setzt das Vorhandensein von rbenvs ruby-buildund natürlich voraus bundler; Ersetzen Sie sie 2.3.1durch eine beliebige Version von Ruby.

Bitte beachten Sie, dass ähnliche Probleme bei verschiedenen von Homebrew verwalteten Bibliotheken auftreten können ( siehe beispielsweise meine eigene Antwort darauf ).

Giuseppe
quelle
War mir das auch passiert - ich frage mich, ob Homebrew nicht bemerken kann, dass einige Bibliotheken mit älteren Versionen von Homebrew verknüpft sind?
Slhck
2
Dies funktionierte für mich in El Capitan mit einer gem install bundlerInstallation nach der Rbenv.
Handgewebesohle
Tritt der Fehler auf, wenn ich brew update && brew upgradeerneut starte?
Frank Fang
1
@FrankFang, es kann oder kann nicht und nicht nur für diesen bestimmten Fehler. Jedes Mal, wenn eine brew upgradeältere Bibliothek durch eine neuere Version ersetzt wird, besteht die Möglichkeit, dass sich andere Programme in Ihrem System beschweren.
Giuseppe
26

Ich bin auf OSX, Ruby2.3.0, Rails5. Durch Hinzufügen gem 'rb-readline'zu meinem wurde Gemfiledieses Problem behoben.

Meekohi
quelle
1
gem rb-readline hat bei mir funktioniert. Ich habe es der: development ,: Testgruppe hinzugefügt - nette schnelle Lösung!
tnum
21

Ich habe den gleichen Fehler mit Ruby 2.1.0 und Rails 4.0 erhalten. Nachdem ich viel gesucht und versucht habe, funktioniert es endlich gut :) Hier ist was ich getan habe:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Die anderen Möglichkeiten:

brew update
brew uninstall readline
brew install readline

Der Befehl autolibs erzwingt, dass RVM alle Abhängigkeiten installiert, sodass Sie sich darüber keine Gedanken machen müssen.

Hoffe es ist hilfreich.

Hoa Hoang
quelle
2
Sie müssen möglicherweise nicht cleanup rvm. nur reinstalldie rubinversion.
Swaps
20

Wie Sachin angedeutet hat, ist die Installation von readline und die anschließende Neuinstallation von Ruby der ideale Ansatz - aber die Details sind für rbenv etwas anders. Angesichts Ihrer Dateipfade schätze ich, dass Sie sich auf einem Mac befinden. Folgendes sollte also helfen:

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

Dies wurde aus dem Ruby-Build-Wiki und einer schnellen Google-Suche übernommen.

klopfen
quelle
Vergessen Sie nicht, danach wieder
aufzuwärmen
2
Nach der Neuinstallation einer vorhandenen Ruby-Version mit readline bundle installzeigte mir das Ausführen eines Befehls wie z. B. viele Warnungen wie "Ignorieren von bcrypt-3.1.11, da seine Erweiterungen nicht erstellt wurden". Wie in den Antworten auf diese Frage vorgeschlagen , wurden gem pristine --allalle diese Fehler auf einmal behoben.
Rory O'Kane
8

Mit Mac, El CaptainVersion, ist es möglich, nur durch Ausführen zu beheben

rvm reinstall your_ruby_version

(wie rvm reinstall ruby-2.3.1)

Hoffe das hilft, viel Glück!

gewalttätig
quelle
Das war alles was ich tun musste.
Pistos
Dies wird Ihre aktuelle Version neu installieren:rvm reinstall $(rvm current)
CTS_AE
Dies ist die einfachste Lösung, die Neuinstallation dauert jedoch einige Zeit. Trotzdem bester Ansatz imho.
f055
1

entnommen von github user @enderahmetyurt (dies ist die einzige Lösung, die für mich funktioniert hat).

Lösung: Fügen Sie gem 'rb-readline'Ihrer Gemfile in der Entwicklungsgruppe hinzu und installieren Sie das Bundle .

Es ist die einfachste Lösung für dumme "Readline" -Fehler.

whataboutme1
quelle
0

Versuchen Sie, readline zu installieren, und installieren Sie Ihren Ruby neu

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

Sachin Singh
quelle
danke für die antwort, aber gibt es eine möglichkeit, rbenv anstelle von rvm weiter zu verwenden?
Wiz