Nie można wykonać „konsoli railsów” z powodu błędu w readline


88

Nie mogę wykonać z rails consolepowodu tego błędu:

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

Zainstalowałem readline przez homebrew. Chciałbym nadal używać rbenv zamiast rvm.

Dziękuję za przeczytanie mojego pytania.


Odpowiedzi:


279

Ostatnio miałem ten sam problem z homebrew i libreadline.7.x.dylib / libreadline.6.x.dylib

Rozwiązałem to uruchamiając:

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

źródło: https://github.com/rails/rails/issues/26658


1
Co za hack :) Ale na razie działa dobrze: D Dzięki!
haslo

18
Używanie dowiązań symbolicznych do nakłaniania systemu do używania innego (głównego!) Numeru wersji jest generalnie złym pomysłem. Byłoby dobrze, gdyby ktoś bardziej kompetentny mógł wyjaśnić, dlaczego powyższa poprawka jest bezpieczna.
Pistos

Jesteś legendą, dziękuję za to, @wiz powinien był oznaczyć cię jako poprawną!
Nick Schwaderer

1
Pobieżny przegląd zmian między libreadline 6.3 i 7.0 nie pokazuje niczego, co wydaje się być przełomową zmianą, spodziewaj się w przypadkach, gdy oprogramowanie mogło polegać na nieudokumentowanym lub błędnym zachowaniu. W świetle tego czułbym się komfortowo wypróbowując to rozwiązanie.
Lyndsy Simon

58

Homebrew jest świetny, ale od czasu do czasu nie gra dobrze z niektórymi innymi ruchomymi częściami.

A brew update && brew upgradewprowadzony libreadline.7.x.dylibpodczas automatycznego usuwania libreadline.6.x.dylib, na którym Ruby wciąż polegał.

Mogą istnieć sprytniejsze sposoby rozwiązania problemu, ale brutalna siła zadziałała:

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

Powyższe zakłada obecność rbenv ruby-buildi oczywiście bundler; zastąp 2.3.1dowolną wersją Rubiego, której używasz.

Pamiętaj, że podobne problemy mogą wystąpić w przypadku różnych bibliotek zarządzanych przez homebrew ( zobacz na przykład moją własną odpowiedź )


Czy to samo właśnie mi się przytrafiło - zastanawiam się, czy Homebrew nie może w jakiś sposób zauważyć, że niektóre biblioteki są powiązane ze starszymi wersjami niektórych dostarczanych przez Homebrew?
slhck

2
To zadziałało dla mnie w El Capitan, z instalacją gem install bundlerpo rbenv.
handwovensole

Czy błąd wystąpi po brew update && brew upgradeponownym uruchomieniu ?
Frank Fang

1
@FrankFang, może, ale nie musi, i to nie tylko z powodu tego konkretnego błędu. Za każdym razem, gdy brew upgradeJAKIEKOLWIEK starsza biblioteka zastępuje jakąkolwiek starszą wersję nowszą wersją, są PEWNE szanse, że inne programy w twoim systemie będą narzekać.
Giuseppe,

26

Jestem na OSX, ruby2.3.0, rails5. Dodanie gem 'rb-readline'do mojego Gemfilerozwiązanego problemu.


1
gem rb-readline zadziałał dla mnie. Dodałem to do: development,: test group - fajna szybka poprawka!
tnum

21

Otrzymałem ten sam błąd z Ruby 2.1.0 i rails 4.0. Po wielu poszukiwaniach i próbach, w końcu działa dobrze :) Oto co zrobiłem:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Inne sposoby:

brew update
brew uninstall readline
brew install readline

Polecenie autolibs wymusi zainstalowanie RVM wszystkich zależności, więc nie musisz się tym martwić.

Mam nadzieję, że to pomocne.


2
możesz nie potrzebować cleanup rvm. tylko reinstallwersja rubinowa.
Zamienia

20

Jak zasugerował Sachin, instalacja readline, a następnie ponowna instalacja ruby ​​jest idealnym podejściem - ale szczegóły są nieco inne w przypadku rbenv. Biorąc pod uwagę ścieżki do plików, domyślam się, że korzystasz z komputera Mac, więc poniższe wskazówki powinny pomóc:

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

To zostało zaczerpnięte z Ruby-build Wiki i szybkiego wyszukiwania w Google.


nie zapomnij
powtórzyć

2
Po ponownym zainstalowaniu istniejącej wersji Ruby z readline, uruchomienie polecenia, takiego jak bundle installpokazało wiele ostrzeżeń, takich jak „Ignorowanie bcrypt-3.1.11, ponieważ jego rozszerzenia nie są zbudowane”. Jak sugerowano w odpowiedziach na to pytanie , gem pristine --allnaprawiono wszystkie te błędy naraz.
Rory O'Kane

8

Używając mac, El Captainwersja, można naprawić po prostu robiąc

rvm reinstall your_ruby_version

(jak rvm reinstall ruby-2.3.1)

Mam nadzięję, że to pomogło, powodzenia!


To było wszystko, co musiałem zrobić.
Pistos

Spowoduje to ponowne zainstalowanie Twojej bieżącej wersji:rvm reinstall $(rvm current)
CTS_AE,

To najprostsze rozwiązanie, ale jego ponowna instalacja zajmuje trochę czasu. Mimo wszystko, najlepsze podejście imho.
f055

1

wzięte z github użytkownika @enderahmetyurt (to jedyne rozwiązanie, które działało dla mnie).

Rozwiązanie: Dodaj gem 'rb-readline'do swojego Gemfile w grupie deweloperskiej i zainstaluj pakiet .

To najłatwiejsze rozwiązanie dla głupich błędów „readline”.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.