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.

mago
fonte
Possível duplicata do console Rails não carrega devido a libreadline
Santhosh

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

Will Clarke
fonte
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 )

Giuseppe
fonte
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.

Meekohi
fonte
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.

Hoa Hoang
fonte
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.

tapinha
fonte
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!

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

whataboutme1
fonte
0

tente instalar o readline e reinstale o ruby

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

Sachin Singh
fonte
obrigado por responder, mas existe alguma maneira de continuar usando rbenv em vez de rvm?
wiz