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.

czarodziej
źródło

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

Will Clarke
źródło
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ź )

Giuseppe
źródło
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.

Meekohi
źródło
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.

Hoa Hoang
źródło
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.

poklepać
źródło
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!

violentr
źródło
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”.

whataboutme1
źródło
0

spróbuj zainstalować readline i ponownie zainstaluj ruby

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

Sachin Singh
źródło
dziękuję za odpowiedź, ale czy jest jakiś sposób, aby nadal używać rbenv zamiast rvm?
wiz