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
atejeda
источник
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 снова работает нормально.

TinMonkey
источник
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

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

Giuseppe
источник
Большой ! Я обновил свой 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
игнасио кьяццо
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Работал у меня. Все подобные нет.

Грег Беннер
источник
Это решение для RubyMine.
Джастин
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]

sealocal
источник
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
arjunswaj
источник
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.

ingconti
источник
3

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

brew link mysql56 --force
tagaism
источник
Это способ связать файл библиотеки ... вместо использования параметра 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
Fraide
источник
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 и без ошибок при запуске скрипта / консоли. Я надеюсь, это поможет вам.

GeezerGeek
источник
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
gem uninstall -aIx

и

bundle install

работал у меня.

atomiccoder
источник
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
Magesh
источник
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
noelvictorino
источник
0

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

Rich_F
источник
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

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

alexventuraio
источник
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

Redcloud
источник
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
rodmclaughlin
источник
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

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

abmap
источник