rails + MySQL в OSX: библиотека не загружена: libmysqlclient.18.dylib


119

Я только начинаю с Руби (и рельсов). Я сделал настройку в соответствии с http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, используя rvm. У меня с sqlite все хорошо работает.

Теперь я хотел бы попробовать преобразовать все в MySQL, так как это то, чем я занимаюсь большую часть своей разработки. В моем Gemfile я заменил sqlite на mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

Но когда я пытаюсь создать БД для рельсов в MySQL, я получаю:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

Я видел другие сообщения, рекомендующие переустановку MySQL через homebrew (мой был установлен через загружаемый DMG), но я бы предпочел не делать этого, поскольку у меня уже есть несколько других баз данных для других проектов, не связанных с Ruby.

У меня действительно есть файл, который ищет Rails; он установлен в /usr/local/mysql/lib/libmysqlclient.18.dylib. Как лучше всего указать Rails, как его найти?


Может ли это быть дубликатом этого? stackoverflow.com/questions/4546698/…
gmile

На самом деле. Я не могу удалить свой вопрос? Проголосовал за закрытие как обман.
Джордж Армхолд

Ответы:


313

Решение довольно простое; Добавьте путь к библиотеке в файл ~ / .bash_profile или ~ / .profile:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Если он все еще не работает (эта работа для меня):

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Есть много блогов install_name_tool, которые мне не подходят, потому что я использую OSX Lion:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search

16
Символическая ссылка работала для меня (после обновления до Mountain Lion). Спасибо!
siannopollo,

5
Symlink делает это, особенно для таких случаев, как запуск рельсов из-под RubyMine, где на .bash_profileсамом деле это не применимо.
maksimov

2
Я добавил ваш DYLD_LIBRARY_PATH в .bash_profile, но мне также пришлось удалить гем mysql2, а затем переустановить его. например: 'gem uninstall mysql2 && gem install mysql2'
brendan

73
Для тех, кто пришел сюда на 10.11, вы больше не можете ссылаться на символическую ссылку usr/lib, но символическая ссылка на usr/local/libбудет работать:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@JonathanSimmons - Ты только что спас меня от выдергивания остатков волос. Исходный ответ на символическую ссылку не работает в OS X 10.11.5, вы просто получаете сообщение об ошибке «ln: /usr/lib/libmysqlclient.18.dylib: Operation not allowed» - Теперь все работает, и я наконец могу начать работа в течение дня ... Спасибо!
Колин Адамс

125

В Эль-Капитане я получил ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

В El Capitan /usr/lib/теперь есть ограниченный флаг, и в него нельзя писать без отключения безопасности, поэтому я просто вставил ссылку /usr/local/lib.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Сервер Rails снова работает нормально.


2
Ответ Алекса не требовался полностью. Одна символическая ссылка сделала свое дело.
gitb

Я сделал это и получил: «connect»: не удается подключиться к локальному серверу MySQL через сокет «/tmp/mysql.sock» (2) (Mysql2 :: Error) »
Джош Хантер

1
@JoshHunter Я считаю, что это отдельная проблема. Здесь есть поток stackoverflow.com/questions/18449050/… также может быть, что сервер MySQL не запущен.
TinMonkey

да, сервер не работал ... это исправило. sudo /usr/local/mysql/support-files/mysql.server start
Джош Хантер

62

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

В моем случае (El Capitan, mysql, установленный через homebrew), brew update && brew upgradeпакет mysql был обновлен до 5.7.10 (с 5.6.x).

Обновление вызвало libmysqlclient.18.dylibзамену на libmysqlclient.20.dylib, но mysql2самоцвет все еще полагался на первое.

Чтобы решить проблему, я сделал: gem uninstall mysql2 && gem install mysql2

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


Большой ! Я обновил свой mysql до 5.7 ... столкнулся с этой проблемой ..... сделал следующие шаги 1. gem uninstall mysql2> selected option 3 2. gem install mysql2 3. добавил это в gemfile проекта ---> gem 'mysql2' , '~> 0.3.21' 4. Установка пакета
Удит Капахи,

10
Я рекомендую всем сначала попробовать это! Если это сработает, вы можете избежать поломки вашей системы с помощью любого другого обходного пути. Иногда вам приходится полагаться на волшебные символические ссылки и т. Д., Но это делает вашу систему все более и более хрупкой. (Если это не сработает, не будет никакого вреда и ничего нельзя исправить.)
Том Уилсон

У меня тоже сработало. Проблема заключалась в том, что я перешел с установки mysql w / homebrew на официальный установщик.
xenetics

1
Для всех пользователей питона получать здесь, pip uninstall mysqlclientа pip install mysqlclientтакже работал.
Питер Долан

26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Это сработало для меня. Я установил MySQL из файла DMG.


Это работало на Mac OS X - Yosemite для меня с MySQL, установленным из файла dmg. Спасибо, Джозеф.
racl101 02

4
Операция не разрешена (очевидно, с sudo), моя версия SO - El capitan
игнасио кьяццо


13

Я столкнулся с этой проблемой после полного удаления и новой установки MySQL. В частности:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

Я даже не трогал свое приложение Rails.

Переустановка mysql2гема решила эту проблему.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]


9

Если вы используете MySQL, установленный из HomeBrew в El Capitan, вам следует связать его следующим образом:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

6

Для MySql 5.6, установленного из DMG на Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

4

Я подтверждаю, что патч от Abhishek действительно работает.

это работает и для Йосемити.

примечание: вместо ссылки на конкретную версию mysql используйте тот факт, что mysql уже построил символическую ссылку:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

это решение действительно работает для Xcode и C API.


3

Для тех, кто употребляет варево. Просто свяжите свою версию mysql с параметром "--force".

brew link mysql56 --force

Это способ связать файл библиотеки ... вместо использования параметра ln -s. Используйте ссылку для пивоварения mysql@5.7 --force для обновленной версии
Вахид Ковсари

Спасибо. Я сделал brew link mysql@5.7 --force. Работает отлично.
Aye Mon Chit

2

Чтобы быть уверенным, какая символическая ссылка необходима (зависит от версии mysql и версии ОС):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

так что :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

2

Это работает для меня:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

В конце концов, это стало для меня вариантом ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor

1

Я использую Rails REE (2.3.4) для имеющейся у нас унаследованной системы. После обновления до El Capitan запуск скрипта / консоли вызвал ошибку, и мое приложение больше не запускалось (с использованием функции pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


Из этого же потока, приведенного выше, я решил, что мне нужно выполнить эту команду в терминале:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Эта команда вызвала ошибку: «ln: /usr/lib/libmysqlclient.18.dylib: Operation not allowed». Я никогда раньше не видел такой ошибки.

Немного покопавшись, я нашел эту статью: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html и следил за инструкции по отключению SIP (новая защита целостности системы El Capitan). После отключения SIP и перезагрузки команда ln работала нормально. Потом отключил SIP. Теперь все нормально. Мое приложение снова запускается с использованием функции pow и без ошибок при запуске скрипта / консоли. Я надеюсь, это поможет вам.


1

На Mac Sierra при использовании Homebrew выполните:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


1

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

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config

1

Я использую Mac OS, и я застрял с этой ошибкой даже после удаления / удаления всех mysql и MAMP. Раньше устанавливал brew install mysqlи тоже пользовался MAMP. addling softlink у меня не работал.

Это было решено только путем удаления всех существующих mysql. а затем установите mysql через MySQL отсюда .


0

используйте это из командной строки:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

пробовал на нескольких компах с maverick всегда работает


0

Если вы используете Bitnami RubyStack и столкнулись с аналогичной проблемой. Попробуй это

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

0

Моя проблема с загрузкой этого файла пакета была плохой символической ссылкой. Так что проверьте ссылку и при необходимости замените ее на новую. В этот момент все стало на свои места. Не знаю, как это случилось, но это случилось. Впервые возникла такая синтаксическая ошибка.


0

Я работал с командой rails g model и получил эту ошибку:

Library not loaded: libmysqlclient.18.dylib

Я пробовал это, и это работало для меня. Я использовал Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Спасибо!

Теперь я использую Yosemite 10.10.5, и у меня такая же ошибка, поэтому я просто запустил эту команду на терминале, и она была успешно исправлена.

$ sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

также вы можете попробовать:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Оба они мне подходят. Надеюсь, это может быть полезно!


0

У меня возникла эта проблема «Библиотека не загружена: libmysqlclient.18.dylib» при импорте MySQLdb из MySQL. Для python3 :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

Решение работает для меня: Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

@MSU_Bulldog Конечно, отвечает на вопрос. Он даже предоставляет новую информацию. Тот факт, что ответ включает ошибку, которая привела их сюда, не означает, что решение, которое они также предоставляют, не имеет ценности.
Artjom B.

0

Единственное, что у меня сработало, это:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

Замените пути mysql и gems, чтобы они соответствовали вашей системе.


0

После долгих поисков в Google и всех попыток ... единственное, что решило мою проблему, - это эта команда:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Я использую MacBook Pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: четверг, 23 июня, 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19


0

Спасибо. После обновления Homebrew у моих приложений Rails возникли проблемы на моем Mac. Я переустановил MySQL (5.7) из исходников, тогда мне пришлось это сделать

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

на основе того, что я прочитал выше, и в моем Gemfile

gem 'mysql2', '0.5.3'

и в database.yml

adapter: mysql2

0

На этот вопрос уже есть много ответов, особенно на этот https://stackoverflow.com/a/10847618/5515861 . Я только хочу добавить пару примечаний. Если вы, ребята, используете Mac, я не знаю, как вы устанавливаете MySQL, но первое, что нужно исследовать, - это где находится ваша установка MySQL. Для меня MySQL установлен с использованием brewдля версии 5.7, и расположение есть /usr/local/opt/mysql@5.7/, поэтому добавьте следующее в my ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

Надеюсь, ты исправишь свои проблемы 😁

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