Библиотека не загружена: /usr/local/opt/readline/lib/libreadline.7.dylib

Когда я пытаюсь запустить rails console я получаю эту ошибку:

/Users/TuzsNewMacBook/.rvm/gems/ruby-2.3.7/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in 'require':
 dlopen(/Users/TuzsNewMacBook/.rvm/rubies/ruby-2.3.7/lib/ruby/2.3.0/x86_64-darwin18/readline.bundle, 9): 
Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)

Быстрый поиск привел меня к этому сообщению, и я попробовал несколько вещей:

brew reinstall postgresql (это действительно БД для этого проекта)

а также

cd /usr/local/opt/readline/lib    
ln libreadline.8.0.dylib libreadline.6.2.dylib

(моя версия readline - 8)

и brew link readline --force

Но ни один из них не исправил это.

Недавно я добавил в свой проект драгоценные камни pry-coolline, guard и guard-livereload если это что guard-livereload (консоль rails загружается нормально перед этим). Я бегу на последних макосах.

(Обновление) Я использую рельсы как консоль, если это имеет какое-то значение.

Любая помощь? Благодарю.

Ответы

Ответ 1

похоже, ошибка выдается при поиске /usr/local/opt/readline/lib/libreadline.7.dylib.

Вы пытались символическую ссылку это?

Так что-то вроде:

cd /usr/local/opt/readline/lib 
ln -s libreadline.8.0.dylib libreadline.7.dylib

Просто попробовал это на macOS Mojave, ruby 2.5.3p105 и Rails 5.2.2 и сработало.

Ответ 2

Переустановка моей версии Ruby, кажется, исправила это:

rvm reinstall 2.3.7

Ответ 3

Да, лучший ответ - переустановить.

Вы можете легко получить версию, набрав:

ruby -v

С rbenv команда выглядит так:

rbenv install 2.3.7

с rvm:

rvm reinstall 2.3.7

Ответ 4

Чаще всего в Ruby-приложениях это вызвано гемами, которые имеют расширения (гемы с надписью "Создание собственных расширений..."), которые построены с использованием определенной версии, в данном случае readline.

В основном, есть два решения:

Либо, вы можете использовать символическую ссылку 8 версии гема, чтобы версия отсутствовала. Это будет работать во многих случаях, но если обратная совместимость нарушена, это не будет.

Или, если драгоценный камень действительно поддерживает версию 8, вы можете переустановить этот конкретный драгоценный камень или "нетронутым" его, запустив gem pristine --all.

РЕДАКТИРОВАТЬ: В рамках вашего "того, что я пробовал", переустановка PostgreSQL также является одним из двоичных файлов, созданных с использованием определенной версии, для которой также может потребоваться перестройка, для работы с системной библиотекой, такой как readline.

Ответ 5

можешь попробовать

cd /usr/local/opt/readline/lib    
ln -s libreadline.8.dylib libreadline.7.dylib

вы на правильном пути, но похоже, что rails ищет libreadline.7.dylib, а libreadline.7.dylib отсутствует в папке.

Ответ 6

Итак, я проверил несколько ответов здесь, но я не думаю, что они могут работать с ванильной установкой Mac Mojave. Я использую 10.14.4 в то время как я сделал это:

  • получить доморощенный с https://brew.sh

  • $ brew install coreutils: это устанавливает пакет gnu coreutils для mac, нам нужна greadlink потому что ссылка для чтения macOSX greadlink от ссылки для чтения gnu. Это чрезвычайно запутанно, но такова жизнь в Макленде.

  • $ echo 'alias readlink=greadlink' >> ~/.bash_aliases Я обнаружил, что macs readlink немного не хватает, поэтому я переопределил существующую readlink, добавив псевдоним greadlink. (Вы можете сделать это доступным для всех пользователей с помощью $ alias readlink=greadlink >>/etc/bashrc что позволит каждому пользователю иметь возможность использовать его.

  • $ ln -s/usr/local/opt/readline/lib/libreadline.8.dylib/usr/local/opt/readline/lib/libreadline.7.dylib Я связал уже связанный .8. файл вместо .8.0. файл, потому что если бы он был обновлен до .8.1. тогда моя ссылка для чтения не сломает и не пропустит функции библиотеки. Я уверен, что мы отформатируем наши макы до того, как выйдет 9+.

Ответ 7

Я бы рекомендовал не использовать нативные библиотеки вручную. В OS X 10.4 стандартный путь include библиотеки /usr/include больше не используется и блокируется SIP (что затрудняет перемещение объектов).

Apple поставляет "устаревший установщик", чтобы вы могли устанавливать заголовки в "старом месте", что также поможет вам правильно найти заголовки, установленные с помощью brew.

cp /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg ~/Desktop && open ~/Desktop/macOS_SDK_headers_for_macOS_10.14.pkg'

Смотрите здесь для подробного описания того, что происходит.

Ответ 8

Моя проблема была такой же при запуске lftp.

Просто запуск brew upgrade решил мою проблему, поскольку он обновил (среди прочего):

readline 8.0.0_1 -> 8.0.1
lftp 4.8.4 -> 4.8.4_2