Невозможно выполнить «консоль рельсов» из-за ошибки с строкой чтения


88

Я не могу выполнить rails consoleиз-за этой ошибки:

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

Я установил readline через homebrew. Я хотел бы продолжать использовать rbenv вместо rvm.

Спасибо, что прочитали мой вопрос.


Ответы:


279

Недавно у меня была такая же проблема с homebrew и libreadline.7.x.dylib / libreadline.6.x.dylib

Я решил это, запустив:

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

источник: https://github.com/rails/rails/issues/26658


1
Что за хак :) Но пока работает отлично: D Спасибо!
haslo

18
Использование символических ссылок, чтобы обманом заставить систему использовать другой (основной!) Номер версии, как правило, плохая идея. Было бы хорошо, если бы кто-нибудь более знающий объяснил, почему вышеуказанное исправление безопасно.
Pistos

Ты легенда, спасибо тебе за это, @wiz должен был правильно отметить тебя!
Ник

1
Беглый обзор изменений между libreadline 6.3 и 7.0 не показывает ничего, что могло бы показаться критическим изменением, за исключением случаев, когда программное обеспечение могло полагаться на недокументированное или ошибочное поведение. В свете этого мне было бы удобно попробовать это решение.
Lyndsy Simon

58

Homebrew - это здорово, но время от времени он плохо сочетается с другими движущимися частями.

brew update && brew upgradeПринес в libreadline.7.x.dylibто время автоматического удаления libreadline.6.x.dylib, что рубин еще полагается на.

Могут быть более умные способы решить проблему, но у меня сработала грубая сила:

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

Выше предполагает наличие rbenv - х ruby-buildи, конечно же , bundler; замените 2.3.1на ту версию Ruby, которую вы используете.

Обратите внимание, что аналогичные проблемы могут возникать с разными библиотеками, управляемыми домашним пивом ( см. Мой собственный ответ на этот вопрос, например )


Произошло ли то же самое со мной - интересно, нет ли у Homebrew способа заметить, что некоторые библиотеки связаны со старыми версиями тех, которые поставляет Homebrew?
slhck

2
Это сработало для меня в El Capitan, gem install bundlerпосле установки rbenv.
handwovensole

Произойдет ли ошибка при brew update && brew upgradeповторном запуске ?
Фрэнк Фанг,

1
@FrankFang, может быть, а может и нет, и не только для этой конкретной ошибки. Каждый раз, когда a brew upgradeзаменяет ЛЮБУЮ старую библиотеку более новой версией, есть НЕКОТОРЫЕ шансы, что другие программы в вашей системе будут жаловаться.
Джузеппе

26

Я использую OSX, ruby2.3.0, rails5. Добавление gem 'rb-readline'к моей Gemfileисправленной этой проблеме.


1
gem rb-readline работал у меня. Я добавил его в группу: development,: test - хорошее быстрое исправление!
tnum 03

21

У меня такая же ошибка с Ruby 2.1.0 и rails 4.0. После долгих поисков и попыток, наконец, все получилось :) Вот что я сделал:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Другие способы:

brew update
brew uninstall readline
brew install readline

Команда autolibs заставит RVM установить все зависимости, поэтому вам не нужно об этом беспокоиться.

Надеюсь, это поможет.


2
вам может не понадобиться cleanup rvm. просто reinstallрубиновая версия.
Свопы

20

Как намекнул Сачин, установка readline, а затем переустановка ruby ​​- идеальный подход, но детали для rbenv немного другие. Учитывая ваши пути к файлам, я предполагаю, что вы используете Mac, поэтому следующее должно помочь:

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

Это было взято из вики по сборке ruby и из быстрого поиска в Google.


не забудьте переделать после этого
iGbanam

2
После переустановки существующей версии Ruby с readline выполнение такой команды, как bundle installпоказало мне множество предупреждений, таких как «Игнорирование bcrypt-3.1.11, потому что его расширения не построены». Как было предложено в ответах на этот вопрос , gem pristine --allисправил все эти ошибки сразу.
Рори О'Кейн,

8

Используя mac, El Captainверсию, можно исправить, просто выполнив

rvm reinstall your_ruby_version

(подобно rvm reinstall ruby-2.3.1 )

Надеюсь это поможет. Удачи!


Это все, что мне нужно было сделать.
Pistos

Это приведет к переустановке вашей текущей версии:rvm reinstall $(rvm current)
CTS_AE

Это простейшее решение, но его переустановка требует времени. Тем не менее, лучший подход имхо.
f055

1

взято у пользователя github @enderahmetyurt (это единственное решение, которое сработало для меня).

Решение: добавьте gem 'rb-readline'в свой Gemfile в группе разработчиков и установите пакет .

Это самое простое решение для глупых ошибок чтения строки.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.