Библиотека не загружена: ошибка 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
bloveless
источник
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/

nduplessis
источник
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, похоже, не в нем. Я отправлю еще раз, если найду более постоянное решение.

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

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

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

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

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

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

tobinjim
источник
2

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

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

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

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

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

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

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

AlexJ
источник
1

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

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

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

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