Не вдається запустити “reils console” через помилку з лінією зчитування


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

Я встановив лінію читання за допомогою домашньої мови. Я хотів би продовжувати використовувати 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
Використання символічних посилань для обману системи на використання того, що насправді є іншим (основним!) Номером версії, як правило, погана ідея. Було б добре, якби хтось більш обізнаний міг пояснити, чому вищевказане виправлення безпечне.
Пістос

Ви легенда, дякую за це, @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's ruby-buildі, звичайно bundler,; замініть 2.3.1на будь-яку версію рубіну, яку ви використовуєте.

Зверніть увагу, що подібні проблеми можуть виникати з різними бібліотеками, якими керує homebrew ( див., Наприклад, мою власну відповідь на це )


Якби те саме трапилось зі мною - цікаво, чи немає для Homebrew способу помітити, що деякі бібліотеки пов’язані зі старими версіями деяких, які постачає Homebrew?
slhck

2
Це спрацювало для мене в El Capitan, gem install bundlerпісля встановлення rbenv.
handwovensole

Чи станеться помилка при brew update && brew upgradeповторному запуску ?
Frank Fang

1
@FrankFang, це може і не мати, і не лише для цієї конкретної помилки. Кожного разу, коли a brew upgradeзамінює БУДЬ-ЯКУ старішу бібліотеку на новішу версію, Є НЕКОЛЬКО шансів, що інші програми у вашій системі будуть скаржитися.
Джузеппе

26

Я на OSX, ruby2.3.0, rails5. Додавання gem 'rb-readline'до моєї Gemfileвиправленої проблеми.


1
gem rb-readline працював у мене. Я додав його до: development,: test group - гарне швидке виправлення!
tnum

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

Це було взято з вікі з рубінової збірки та швидкого пошуку в Google.


не забудьте
переробити

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)

Сподіваюся, це допоможе, удачі!


Це було все, що мені потрібно було зробити.
Пістос

Це переінсталює вашу поточну версію:rvm reinstall $(rvm current)
CTS_AE

Це найпростіше рішення, але для перевстановлення потрібно деякий час. Все-таки найкращий підхід до імхо.
f055,

1

взято з користувача github @enderahmetyurt (це єдине рішення, яке працювало у мене).

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

Це найпростіше рішення для безглуздих помилок "readline".


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.