Библиотека не загружена: ошибка libmysqlclient.16.dylib при попытке запустить rails server в OS X 10.6 с помощью mysql2 gem

Некоторое время я боролся с этим.

Я установил Rails 3, gem, mysql на свою машину Snow Leopard. Все шло хорошо, пока я не создал свой первый проект и не попытался запустить

rails server

После запуска я получаю:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Насколько я могу судить, проблема связана с гемом mysql2. Кажется, MySQL работает нормально, и мой Gemfile ссылается на mysql2, мой файл database.yml тоже выглядит нормально.

В ошибке упоминается

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

И все еще

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle есть !?

Если я использую старый гем mysql, WEBrick загружается нормально. Но это не идеально, не так ли?

Я перепробовал все, что мне может дать Google! Любая помощь очень ценится.


person Jonty Brook    schedule 28.12.2010    source источник


Ответы (24)


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

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
person bloveless    schedule 23.05.2011
comment
Это самый простой и правильный способ решить эту проблему. - person Voldy; 24.09.2011
comment
+1 это, более популярный ответ у меня не сработал (OS X Lion, xcode 4.1) - person Joe Sak; 20.12.2011
comment
Спасибо за это. отмеченный выше ответ работал только для одного сайта, но работал постоянно. Это мо 'бетта. - person fregas; 16.01.2012
comment
Спасибо!! Наконец-то разобрался с этим! - person Maltiriel; 03.04.2012
comment
Mac OS X Lion 10.7.3. Только это помогло! Ура! :) - person ExiRe; 04.05.2012
comment
Престижность! Это устранило мою проблему с гемом mysql2 !! Спасибо. - person Ode; 09.10.2012
comment
Для тех, кому интересно, что происходит, эта команда создает символическую ссылку со второго места на первое. Когда гем ищет клиентскую библиотеку MySQL в /usr/lib, эта ссылка перейдет в то место, где он фактически установлен. В OS X это обычно в /usr/local/mysql/lib, на который ссылается эта команда. Если ваша библиотека установлена ​​в другом месте, вам нужно настроить эту команду. Введите locate libmysqlclient.18.dylib и замените результат на первый аргумент после -s. - person Siobhán; 31.10.2012
comment
@ Шон Д., когда я запускаю команду locate libmysqlclient.18.dylib, я получаю этот вывод WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear., что не так? - person GiH; 24.01.2013
comment
@GiH Вам просто нужно запустить команду, которую он вам сообщает (sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Это запустит процесс индексации вашего жесткого диска, что позволит команде locate работать в будущем. В большинстве случаев, однако, я думаю, что вам не нужно этого делать, и вы можете просто использовать команду, предоставленную luvlss как есть. - person Siobhán; 27.01.2013
comment
Это исправило это для меня! Спасибо. [Mac OS X 10.8.2] +1 - person daustin777; 30.01.2013
comment
@SeanD. Это рекомендуемый способ делать такие вещи? Как под OS X 10.8 установить дилиб? Один из других ответов? - person bobobobo; 10.04.2013
comment
О, я понимаю, что он делает. Вы также можете скопировать весь libmysqlclient.18.dylib файл напрямую без символической ссылки. По сути, это эквивалент копирования библиотеки DLL в C: \ Windows \ System32. Приятно знать, что OS X и Windows не так уж и отличаются друг от друга. - person bobobobo; 10.04.2013
comment
Я действительно получаю Library not loaded: /usr/local/lib/mysql/libmysqlclient_r.16.dylib ошибку. У меня есть libmysqlclient.18.dylib' in lib`, но нет libmysqlclient.16.dyli. Кроме того, libmysqlclient.18.dylib находится в папке lib, а не в папке mysql. mysql находится в usr/local/bin/mysql - person Ava; 20.05.2013
comment
Когда я запускаю команду с вариантами 16 и 18, я получаю ln: /usr/lib/libmysqlclient.16.dylib: File exists. - person Ava; 20.05.2013

В конце концов, я решил эту проблему!

Я переустановил Ruby и Rails под RVM. Я использую Ruby версии 1.9.2-p136.

После переустановки под rvm эта ошибка все еще присутствовала.

В конце концов, волшебная команда, которая решила это, была:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Надеюсь, это поможет кому-то другому!

person Jonty Brook    schedule 30.12.2010
comment
Это каким-то образом сбросило привилегии mysql, и теперь я не могу войти в систему ... даже после выполнения сброса пароля с помощью файла, как описано в документации mysql. - person Coderama; 06.02.2011
comment
Спасибо, это помогло мне. А для других с той же проблемой, если вы используете rvm, пропустите sudo, иначе разрешения, вероятно, изменятся. - person DanneManne; 07.03.2011
comment
Магическая команда работает, даже если вы не используете RVM - просто измените последний аргумент так, чтобы он указывал на mysql2-0.2.6/lib/mysql2/mysql2.bundle в том месте, где установлены ваши драгоценные камни. - person Tobias Cohen; 15.03.2011
comment
Большое спасибо. Как вы это догадались? - person Derek; 23.03.2011
comment
Смешно, как сложно соединить mysql с помощью rails. ИМО еще одна причина использовать монго - person Jonathan; 25.07.2011
comment
Спасибо! Мне нужна была немного другая команда для моего Mac OS X Lion с RVM 1.6.4 с Ruby 1.9.2-p180, mysql2 gem 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle - person Randy Eppinger; 27.11.2011
comment
Это сработало и для меня, за исключением того, что не было sudo и фактическая командная строка, настроенная так, чтобы указывать на gemset, который я использую. Спасибо! - person Giuseppe; 19.12.2011
comment
Решение sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib… вероятно, лучше, потому что изменения install_name_tool изменяют файлы (mysqld или mysql2.bundle), которые вы можете когда-нибудь переустановить, и потеряете это исправить. - person jackr; 05.06.2012
comment
Это работает ... Я не собираюсь копировать и вставлять свою команду, просто имейте в виду, что ваша версия ruby ​​И версия dylib будут разными числами - person jasonsemko; 21.11.2012

Это исправление сработало для меня очень хорошо:

Добавьте следующее в свой ~ / .profile

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-rails-3/

person nduplessis    schedule 16.02.2011
comment
Большое тебе спасибо. Это сработало для меня. (Mac os x 10.6.6i, ruby ​​1.9.3p327) с использованием RVM. - person datnt; 25.12.2012
comment
Подтвержденный. Это все, что мне нужно было добавить в osx Maverick 10.9.1. - person Artur79; 09.02.2014

Для меня это было просто потому, что я обновил mysql, но не обновил гем mysql2 - переустановка драгоценного камня исправит это ...

gem pristine mysql2

person Luke    schedule 10.11.2013
comment
Это должен быть выбранный ответ. - person El Guapo; 03.10.2016

У меня такая же проблема. Похоже, не удалось найти библиотеку libmysqlclient. Временное исправление, которое сработало для меня, следующее:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

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

Изменить: на самом деле это исправление, похоже, более точно решает проблему.

person Ogapo    schedule 28.12.2010
comment
Это меня спасло. Большое спасибо. - person harryghgim; 04.08.2020

Добавьте в свой ~/.bash_profile следующее:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

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

person DV Dasari    schedule 29.11.2011
comment
Ага, работает на 1.9.3-p448. Жалко, что это не принятый ответ. - person andreimarinescu; 21.10.2013

В обновлении OSX El Capitan при этом:

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

это выдает ошибку вроде

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Чтобы избежать этого, вы можете сначала найти libmysqlclient.18.dylib с помощью команды

User$ locate libmysqlclient.18.dylib

В моем случае он вернул /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Поэтому вместо usr/lib/ мы создадим символическую ссылку на usr/local/lib/ следующим образом:

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

Подробнее: https://forums.developer.apple.com/thread/7935.

person Sony Mathew    schedule 30.10.2015
comment
На El Capitan мне потребовалась последняя строчка: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib - person Justin; 17.11.2015
comment
Рад, что это помогло кому-то. : D - person Sony Mathew; 17.11.2015
comment
Это ПРАВИЛЬНЫЙ ответ для elcapitan, ваша целевая ссылка должна быть в папке /usr/local/lib - person Arnold Roa; 28.02.2016

следующие строки работают для меня. Я использую Mac 10.7.2.

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

person S. Rasel    schedule 07.01.2013
comment
Это то, что решило мою проблему. Спасибо! - person Justin Bozonier; 24.04.2013

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

person Anh Pham    schedule 23.04.2012
comment
На своей машине, запустив Mavericks, я удалил все версии гема mysql2, выполнив удаление гема mysql2 и ответив All versions в командной строке. Затем я запустил brew upgrade mysql, а затем gem install mysql2. - person Martin Streicher; 07.01.2014

Вот как это сработало для меня:

Я выполнил следующую команду
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2 -0.2.7 / библиотека / mysql2 / mysql2.bundle

Мои среды:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, для osx10.6 (i386) с использованием readline 5.1

$ ruby ​​-v
ruby ​​1.9.2p180 (18.02.2011, редакция 30909) [x86_64-darwin10.7.0]

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

person DV Dasari    schedule 12.04.2011

Спасибо, Огапо! Экспорт этого псевдонима сработал для меня, а затем я перешел по ссылке, и в моем случае mysql2.bundle был в /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, поэтому Я скорректировал install_name_tool, чтобы изменить этот пакет, а не один в ~ / .rvm, и все заработало так, как должно быть.

А сейчас:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
person tobinjim    schedule 28.12.2010

привет, это сработало для меня по рекомендованной ссылке от Фреди Андерсена

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

просто нужно было перейти на мою версию mysql, в команде, спасибо

person manuelBetancurt    schedule 24.01.2011

Я решил эту проблему, удалив свой gemset для текущего проекта, воссоздав его и повторно запустив установку пакета. Думаю, я вызвал это установкой более новой версии mysql.

person Ryan    schedule 11.03.2011

У меня возникла эта проблема при работе с Django, я использую brew для установки многих своих программ с открытым исходным кодом, и мне нужно было сделать следующее, поскольку я использовал brew для установки mysql:

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

Обязательно замените на свою версию библиотек!

person Addiction2Code    schedule 16.04.2012

bundle install mysql --force мне помог. Он переустановил зависимости, которые исчезли в результате brew uninstall mysql.

person Aram    schedule 12.01.2016

Джонти, я тоже борюсь с этим.

Думаю, здесь есть подсказка:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Заметили, что путь к дилибу довольно короткий?

Я пытаюсь выяснить, где инструкции по установке гемов уходят от пути к dylib, но это происходит медленно, поскольку я сам никогда не создавал гем.

Я отправлю больше, если найду больше!

person tobinjim    schedule 28.12.2010

У меня была такая же проблема несколько дней назад. В конце концов мне удалось ее решить. Я не совсем уверен, как, но все равно скажу вам, что я сделал. Может, это тебе поможет.

Я начал с загрузки RVM. Если вы еще не используете его, я настоятельно рекомендую это сделать. По сути, он создает «песочницу» для новой отдельной установки Ruby, RoR и RubyGems. Фактически, у вас может быть несколько установок одновременно и мгновенно переключаться между ними. Работает как часы.

Почему это полезно? Потому что не стоит связываться с установкой Ruby по умолчанию в OS X. Система зависит от этого. Лучше просто оставить установку Ruby и RoR по умолчанию в покое и создать новую, используя RVM, которую вы можете использовать для своей собственной разработки.

Как только я создал свою отдельную установку Ruby, я просто установил RoR, RubyGems и mysql, и все заработало. Точные шаги, которые я предпринял, см. В моем вопросе: Установка Rails, MySQL и т. Д. все идет не так

Опять же: я не знаю наверняка, что это решит вашу проблему. Но это определенно помогло мне, и в любом случае использование RVM очень рекомендуется.

person Rits    schedule 28.12.2010

Я все еще обнаружил, что с решениями, приведенными выше, он не работает (например) с плагином Rails для TextMate. У меня аналогичная ошибка (при получении схемы базы данных).

Итак, что сделал, открытый терминал:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Замените mysql-5.5.8-osx10.6-x86_64 своим собственным путем (или mysql).

Это создает символьную ссылку на библиотеку, теперь rails запускается из командной строки, а также подключаемые модули TextMate, такие как ruby-on-rails-tmbundle.

Для ясности: это также исправляет ошибку, возникающую при запуске сервера rails.

person Roger    schedule 11.01.2012

Обычно это происходит при обновлении mysql. Установленный гем mysql2, который был построен на старых библиотеках mysql, не может работать с новыми библиотеками. Просто нужно переустановить.

Удалите mysql2 с помощью gem uninstall mysql2. Затем установите его с помощью gem install mysql2

person longkt90    schedule 05.03.2016

Я решил это, создав файл .rvmrc в папке моего проекта, содержащий:

rvm use <yourrubie>

затем введите мой путь к проекту

cd ~/myprojectpath

тогда я бегу

bundle install
person Tomasz Mazur    schedule 13.09.2011

Моя версия команды luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Пассажир 5.0.21

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

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

sudo unlink /usr/lib/libmysqlclient.18.dylib

person AlexJ    schedule 13.11.2015

Откройте Терминал и запустите следующее:

export PATH=$PATH:/usr/local/mysql/bin

Он должен работать.

person Slipstream    schedule 16.09.2016
comment
Это сделало свою работу, спасибо !!! У меня возникли проблемы с запуском Django в Visual Studio Code. Продолжает получать сообщение об ошибке, установил ли я mysqlclient на virtualenv. - person Irshu; 07.03.2020

Если вы используете OSX и установили mysql с помощью brew, вы можете:

brew link mysql

Если у вас возникли проблемы с версией (у меня был запущен mysql 5.7, а моему гему требовалось 5.6.25), вы можете

brew unlink mysql
brew switch mysql 5.6.25
person Ariel Cabib    schedule 19.02.2016

Для меня мне пришлось вручную удалить mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
person Dillawes0me    schedule 05.04.2018