No se puede ejecutar la "consola de rieles" debido a un error con readline

88

No puedo ejecutar rails consoledebido a este error:

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

He instalado readline a través de homebrew. Me gustaría seguir usando rbenv en lugar de rvm.

Gracias por leer mi pregunta.

fenómeno
fuente
Posible duplicado de la consola
Santhosh

Respuestas:

279

Tuve el mismo problema recientemente con homebrew y libreadline.7.x.dylib / libreadline.6.x.dylib

Lo resolví ejecutando:

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

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

Will Clarke
fuente
1
Qué truco :) Pero funciona muy bien, por ahora: D ¡Gracias!
haslo
18
Usar enlaces simbólicos para engañar al sistema para que use lo que en realidad es un número de versión diferente (¡mayor!) Es generalmente una mala idea. Sería bueno que alguien con más conocimientos pudiera explicar por qué la solución anterior es segura.
Pistos
Eres una leyenda, gracias por esto, @wiz debería haberte marcado como correcto.
Nick Schwaderer
1
Una revisión superficial de los cambios entre libreadline 6.3 y 7.0 no muestra nada que parezca ser un cambio importante, excepto en los casos en que el software puede haber dependido de un comportamiento indocumentado o con errores. Me sentiría cómodo probando esta solución a la luz de eso.
Lyndsy Simon
58

Homebrew es genial, pero de vez en cuando no funciona bien con algunas de las otras partes móviles.

Se brew update && brew upgradeintrodujo libreadline.7.x.dylibmientras se eliminaba automáticamente libreadline.6.x.dylib, en el que Ruby todavía confiaba.

Puede haber formas más inteligentes de solucionar el problema, pero la fuerza bruta funcionó para mí:

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

Lo anterior asume la presencia de rbenv ruby-buildy, por supuesto bundler,; reemplácelo 2.3.1con cualquier versión de ruby ​​que esté utilizando.

Tenga en cuenta que pueden ocurrir problemas similares con diferentes bibliotecas administradas por homebrew ( consulte mi propia respuesta a esto, por ejemplo )

Giuseppe
fuente
Me acababa de pasar lo mismo, me pregunto si no hay alguna forma de que Homebrew se dé cuenta de que algunas bibliotecas están vinculadas a versiones anteriores de algunas de las que proporciona Homebrew.
slhck
2
Esto funcionó para mí en El Capitan, con un gem install bundlerdespués de la instalación de rbenv.
handwovensole
¿Ocurrirá el error cuando brew update && brew upgradevuelva a ejecutar ?
Frank Fang
1
@FrankFang, puede que sí o no, y no solo por este error en particular. Cada vez que a brew upgradereemplaza CUALQUIER biblioteca anterior con una versión más reciente, hay ALGUNAS posibilidades de que otros programas en su sistema se quejen.
Giuseppe
26

Estoy en OSX, ruby2.3.0, rails5. Añadiendo gem 'rb-readline'a mi Gemfilesolucionado este problema.

Meekohi
fuente
1
gem rb-readline funcionó para mí. Lo agregué al: desarrollo,: grupo de prueba - ¡buena solución rápida!
tnum
21

Recibí el mismo error con Ruby 2.1.0 y rails 4.0. Después de buscar y probar mucho, finalmente funcionó bien :) Esto es lo que hice:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Las otras formas:

brew update
brew uninstall readline
brew install readline

El comando autolibs obligará a RVM a instalar todas las dependencias, por lo que no tendrá que preocuparse por ello.

Espero que sea de ayuda.

Hoa Hoang
fuente
2
puede que no sea necesario cleanup rvm. solo reinstallla versión rubí.
Intercambios
20

Como insinuó Sachin, instalar readline y luego reinstalar ruby ​​es el enfoque ideal, pero los detalles son un poco diferentes para rbenv. Dadas sus rutas de archivo, supongo que está en una Mac, por lo que lo siguiente debería ayudar:

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

Esto fue tomado de Ruby-build Wiki y una búsqueda rápida en Google.

palmadita
fuente
no olvides repetir después de hacer esto
iGbanam
2
Después de reinstalar una versión existente de Ruby con readline, ejecutar un comando como bundle installme mostró muchas advertencias como "Ignorando bcrypt-3.1.11 porque sus extensiones no están construidas". Como se sugiere en las respuestas a esta pregunta , gem pristine --allcorrigió todos esos errores a la vez.
Rory O'Kane
8

Usando mac, El Captainversión, es posible arreglar simplemente haciendo

rvm reinstall your_ruby_version

(como rvm reinstall ruby-2.3.1)

Espero que esto ayude, buena suerte!

violentr
fuente
Esto era todo lo que necesitaba hacer.
Pistos
Esto reinstalará su versión actual:rvm reinstall $(rvm current)
CTS_AE
Esta es la solución más simple, pero la reinstalación lleva algún tiempo. Aún así, mejor enfoque en mi humilde opinión.
f055
1

tomado del usuario de github @enderahmetyurt (esta es la única solución que funcionó para mí).

Solución: agregue gem 'rb-readline'a su Gemfile en el grupo de desarrollo y agrupe la instalación .

Es la solución más fácil para errores tontos de "readline".

whataboutme1
fuente