Impossibile eseguire "rails console" a causa di un errore con readline


88

Non posso eseguire a rails consolecausa di questo errore:

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

Ho installato readline tramite homebrew. Vorrei continuare a usare rbenv invece di rvm.

Grazie per aver letto la mia domanda.


Risposte:


279

Recentemente ho avuto lo stesso problema con homebrew e libreadline.7.x.dylib / libreadline.6.x.dylib

L'ho risolto eseguendo:

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

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


1
Che trucco :) Ma funziona benissimo, per ora: D Grazie!
haslo

18
L'uso di collegamenti simbolici per indurre il sistema a utilizzare quello che è effettivamente un numero di versione diverso (maggiore!) È generalmente una cattiva idea. Sarebbe utile se qualcuno più esperto potesse spiegare perché la correzione di cui sopra è sicura.
Pistos

Sei una leggenda, grazie per questo, @wiz avrebbe dovuto contrassegnarti come corretto!
Nick Schwaderer

1
Una rapida rassegna delle modifiche tra libreadline 6.3 e 7.0 non mostra nulla che sembri essere un cambiamento decisivo, aspettatevi nei casi in cui il software potrebbe fare affidamento su comportamenti non documentati o difettosi. Mi sentirei a mio agio nel provare questa soluzione alla luce di ciò.
Lyndsy Simon,

58

Homebrew è fantastico, ma ogni tanto non funziona bene con alcune delle altre parti in movimento.

A brew update && brew upgradeportato libreadline.7.x.dylibdurante la rimozione automatica libreadline.6.x.dylib, su cui Ruby faceva ancora affidamento.

Potrebbero esserci modi più intelligenti per risolvere il problema, ma la forza bruta ha funzionato per me:

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

Quanto sopra presuppone la presenza di rbenv ruby-builde, ovviamente bundler,; sostituisci 2.3.1con qualsiasi versione di ruby ​​stai usando.

Si noti che problemi simili possono verificarsi con diverse librerie gestite da homebrew ( vedere la mia risposta a questo, ad esempio )


È successo lo stesso a me: mi chiedo se non ci sia un modo per Homebrew di notare che alcune librerie sono collegate a versioni precedenti di alcune fornite da Homebrew?
slhck

2
Questo ha funzionato per me in El Capitan, con un gem install bundlerdopo l'installazione di rbenv.
suola tessuta a mano

L'errore si verificherà quando corro di brew update && brew upgradenuovo?
Frank Fang

1
@FrankFang, può o no, e non solo per questo particolare errore. Ogni volta che un brew upgradesostituisce QUALSIASI libreria precedente con una versione più recente, ci sono ALCUNE possibilità che altri programmi nel tuo sistema si lamentino.
Giuseppe

26

Sono su OSX, ruby2.3.0, rails5. Aggiungendo gem 'rb-readline'al mio Gemfilerisolto questo problema.


1
gem rb-readline ha funzionato per me. L'ho aggiunto al gruppo: development,: test - bella soluzione rapida!
fino al

21

Ho ricevuto lo stesso errore con Ruby 2.1.0 e rails 4.0. Dopo aver cercato e provato molto, finalmente funziona bene :) Ecco cosa ho fatto:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Gli altri modi:

brew update
brew uninstall readline
brew install readline

Il comando autolibs costringerà RVM a installare tutte le dipendenze, quindi non devi preoccupartene.

Spero sia utile.


2
potresti non averne bisogno cleanup rvm. solo reinstallla versione rubino.
Scambia il

20

Come ha accennato Sachin, installare readline e reinstallare ruby ​​è l'approccio ideale, ma i dettagli sono leggermente diversi per rbenv. Dati i percorsi dei file, immagino che tu sia su un Mac, quindi quanto segue dovrebbe aiutare:

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

Questo è stato preso dal Wiki di ruby-build e da una rapida ricerca su Google.


non dimenticare di ripassare dopo averlo fatto
iGbanam

2
Dopo aver reinstallato una versione esistente di Ruby con readline, l'esecuzione di un comando come bundle installmi ha mostrato molti avvisi come "Ignorare bcrypt-3.1.11 perché le sue estensioni non sono state compilate". Come suggerito nelle risposte a questa domanda , gem pristine --allho corretto tutti questi errori contemporaneamente.
Rory O'Kane

8

Utilizzando mac, El Captainversione, è possibile correggere semplicemente facendo

rvm reinstall your_ruby_version

(mi piace rvm reinstall ruby-2.3.1)

Spero che questo aiuti, buona fortuna!


Era tutto quello che dovevo fare.
Pistos

Questo reinstallerà la tua versione attuale:rvm reinstall $(rvm current)
CTS_AE

Questa è la soluzione più semplice, ma la reinstallazione richiede del tempo. Comunque, il miglior approccio imho.
f055

1

tratto da github user @enderahmetyurt (questa è l'unica soluzione che ha funzionato per me).

Soluzione: aggiungi gem 'rb-readline'al tuo Gemfile nel gruppo di sviluppo e installa in bundle .

È la soluzione più semplice per stupidi errori "readline".


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.