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


206

Я боролся с этим в течение некоторого времени.

Я установил 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 может дать мне! Любая помощь высоко ценится.

Ответы:


393

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

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

11
Это самый простой и правильный способ решить эту проблему.
— Волди

2
Спасибо за это. отмеченный ответ выше работал только для одного сайта, но это работало постоянно. Это мо 'бетта.
— Fregas

12
Для тех, кому интересно, что происходит, эта команда создает символическую ссылку со второго места на первое. Когда гем ищет под клиентской библиотекой MySQL /usr/lib, эта ссылка преобразуется в место, где она фактически установлена. На OS X это обычно под /usr/local/mysql/lib, где ссылка на эту команду. Если ваша библиотека установлена ​​в другом месте, вам нужно настроить эту команду. Введите locate libmysqlclient.18.dylibи подставьте результат для первого аргумента после -s.
— Siobhán

1
@Sean D., когда я запускаю 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.что не так?
— GiH

1
@GiH Вам просто нужно запустить команду, которая говорит вам ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Это запустит процесс индексации вашего жесткого диска, что заставит locateкоманду работать в будущем. Однако в большинстве случаев я думаю , что вам не нужно этого делать, и вы можете просто использовать команду, которую luvlss предоставил как есть.
— Сиобхан

93

Я решил это, в конце концов!

Я переустановил 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

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


1
Это каким-то образом сбрасывает привилегии mysql, и теперь я не могу войти ... даже после выполнения сброса пароля, используя файл, как описано в документах mysql.
— Coderama

2
Спасибо, это сделало это для меня. А для других с такой же проблемой, если вы используете rvm, тогда пропустите sudo, иначе права доступа, вероятно, изменятся.
— DanneManne

2
Волшебная команда работает, даже если вы не используете RVM - просто измените последний аргумент, чтобы указать, mysql2-0.2.6/lib/mysql2/mysql2.bundleгде установлены ваши драгоценные камни.
— Тобиас Коэн

2
Огромное спасибо. Как же ты понял это?
— Дерек

7
Спасибо! Мне нужна была немного другая команда для моего 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
— Рэнди Эппингер,

88

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

Добавьте следующее в ваш ~ / .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/


1
Большое спасибо. Это сработало для меня. (Mac OS X 10.6.6i, ruby ​​1.9.3p327), используя RVM.
— Дата

Подтверждено. Это было все, что я должен был добавить на OSX Maverick 10.9.1
— Artur79

40

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

gem pristine mysql2


Это должен быть выбранный ответ.
— Эль Гуапо

26

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

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

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

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


24

Добавьте ниже к вашему ~/.bash_profile:

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

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


Да, работает на 1.9.3-p448. Позор, что это не принятый ответ.
— андреймаринеску

17

В обновлении 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


1
На El Capitan для меня все, что вам понадобилось, это ваша последняя строчка:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
— Джастин,

Рад, что это помогло кому-то. : D
— Sony Mathew

Это правильный ответ для elcapitan, ваша целевая ссылка должна быть в /usr/local/libпапке
— Arnold Roa

13

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

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


1
Это то, что исправило мою проблему. Спасибо!
— Джастин Бозонье

11

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


1
На моей машине под управлением Mavericks я удалил все версии gem mysql2 с помощью gem uninstall mysql2 и ответил All versionsна приглашение. Затем я запустил обновление brew mysql и затем gem install mysql2.
— Мартин Штрайхер,

4

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

Я выполнил следующую команду
следующую 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 /lib/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 (2011-02-18, редакция 30909) [x86_64-darwin10.7.0]

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


3

Спасибо, Огапо! Экспорт этого псевдонима работал для меня, и затем я перешел по ссылке, и в моем случае 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)

3

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

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, в команде, спасибо


3

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


3

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

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

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


3

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


Unknown switches '--force'
— Арнольд Роа

2

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

Я думаю, что здесь есть ключ:

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, но он идет медленно, поскольку я сам никогда не создавал гем.

Я выложу больше, если найду больше!


2

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

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

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

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

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


2

Я все еще обнаружил, что с вышеупомянутыми решениями он не работал (например) с плагином 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.


2

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

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


1

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

rvm use <yourrubie>

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

cd ~/myprojectpath

тогда я бегу

bundle install

1

Моя версия команды 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


1

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

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

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


1
Это сделал работу, спасибо !!! У меня были проблемы с запуском Django на коде Visual Studio. Получает ошибку, установил ли я mysqlclient на virtualenv.
— Иршу

0

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

brew link mysql

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

brew unlink mysql
brew switch mysql 5.6.25

0

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

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.