Não é possível executar o "console rails" devido a um erro com readline


88

Não consigo executar rails consoledevido a este erro:

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

Instalei o readline via homebrew. Eu gostaria de continuar usando o rbenv em vez do rvm.

Obrigado por ler minha pergunta.


Respostas:


279

Tive o mesmo problema recentemente com o homebrew e libreadline.7.x.dylib / libreadline.6.x.dylib

Resolvi executando:

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
Que hack :) Mas funciona muito bem, por enquanto: D Obrigado!
haslo

18
Usar links simbólicos para enganar o sistema para que ele use o que na verdade é um número de versão diferente (principal!) Geralmente é uma má ideia. Seria bom se alguém com mais conhecimento pudesse explicar por que a correção acima é segura.
Pistos

Você é uma lenda, obrigado por isso, @wiz deveria ter marcado você correto!
Nick Schwaderer

1
Uma revisão superficial das mudanças entre libreadline 6.3 e 7.0 não mostra nada que pareça ser uma mudança significativa, espere em casos onde o software pode ter dependido de comportamento não documentado ou com erros. Eu ficaria confortável tentando essa solução em vista disso.
Lyndsy Simon

58

Homebrew é ótimo, mas de vez em quando não combina bem com algumas das outras partes móveis.

A brew update && brew upgradetrouxe libreadline.7.x.dylibenquanto remove automaticamente libreadline.6.x.dylib, que ruby ​​ainda estava contando.

Pode haver maneiras mais inteligentes de resolver o problema, mas a força bruta funcionou para mim:

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

O acima pressupõe a presença de rbenv's ruby-builde, claro bundler,; substitua 2.3.1por qualquer versão de ruby ​​que você esteja usando.

Observe que problemas semelhantes podem ocorrer com diferentes bibliotecas gerenciadas por homebrew ( veja minha própria resposta para isso, por exemplo )


O mesmo tinha acontecido comigo - será que não há como o Homebrew perceber que algumas bibliotecas estão vinculadas a versões mais antigas de algumas que o Homebrew fornece?
slhck de

2
Isso funcionou para mim no El Capitan, gem install bundlerapós a instalação do rbenv.
tecido à mão de

O erro ocorrerá quando eu executar brew update && brew upgradenovamente?
Frank Fang

1
@FrankFang, pode ou não, e não apenas para este erro específico. Cada vez que um brew upgradesubstitui QUALQUER biblioteca mais antiga por uma versão mais recente, há ALGUMAS chances de outros programas em seu sistema reclamarem.
Giuseppe

26

Estou no OSX, ruby2.3.0, rails5. Adicionar gem 'rb-readline'ao meu Gemfilecorrigiu este problema.


1
gem rb-readline funcionou para mim. Eu o adicionei ao: development,: test group - boa solução rápida!
tnum

21

Eu obtive o mesmo erro com Ruby 2.1.0 e rails 4.0. Depois de pesquisar e tentar muito, finalmente funcionou bem :) Aqui está o que eu fiz:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

As outras formas:

brew update
brew uninstall readline
brew install readline

O comando autolibs forçará o RVM a instalar todas as dependências, então você não precisa se preocupar com isso.

Espero que seja útil.


2
você pode não precisar cleanup rvm. apenas reinstalla versão ruby.
Troca de

20

Como Sachin sugeriu, instalar o readline e então reinstalar o ruby ​​é a abordagem ideal - mas os detalhes são um pouco diferentes para o rbenv. Dados os caminhos dos seus arquivos, suponho que você esteja em um Mac, então o seguinte deve ajudar:

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

Isso foi retirado do Wiki desenvolvido em ruby e de uma rápida pesquisa no Google.


não se esqueça de refazer depois de fazer isso
iGbanam

2
Depois de reinstalar uma versão existente do Ruby com readline, rodar um comando como o que bundle installme mostrou muitos avisos como “Ignorando bcrypt-3.1.11 porque suas extensões não são construídas”. Conforme sugerido nas respostas a esta pergunta , gem pristine --allcorrigiu todos os erros de uma vez.
Rory O'Kane,

8

Usando mac, El Captainversion, é possível consertar apenas fazendo

rvm reinstall your_ruby_version

(como rvm reinstall ruby-2.3.1)

Espero que isso ajude, boa sorte!


Isso era tudo que eu precisava fazer.
Pistos 15/11/2016

Isso reinstalará sua versão atual:rvm reinstall $(rvm current)
CTS_AE

Esta é a solução mais simples, mas leva algum tempo para reinstalar. Ainda assim, a melhor abordagem imho.
f055 de

1

retirado do usuário do github @enderahmetyurt (esta é a única solução que funcionou para mim).

Solução: Adicione gem 'rb-readline'ao seu Gemfile no grupo de desenvolvimento e instale o pacote .

É a solução mais fácil para erros bobos de "readline".


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.