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.


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


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 )


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.


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.


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.


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!


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".


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.