Библиотека не загружена: ошибка libmysqlclient.16.dylib при попытке запустить "сервер rails" на 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 может дать мне! Любая помощь очень ценится.

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 4

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

gem pristine mysql2

Ответ 5

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

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

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

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

Ответ 6

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

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

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

Ответ 7

В 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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Я выполнил команду ниже
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 Рассылка 5.5.11 для osx10.6 (i386) с использованием readline 5.1

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

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

Ответ 11

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

Ответ 12

Привет, он работал у меня по рекомендованной ссылке от Fredy Andersen

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

Ответ 13

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

Ответ 14

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

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

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

Ответ 15

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

Ответ 16

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

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

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

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

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

Ответ 17

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

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

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 довольно короткий?

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

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

Ответ 18

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

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

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

Ответ 19

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

rvm use <yourrubie>

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

cd ~/myprojectpath

тогда я запускаю

bundle install

Ответ 20

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

Ответ 21

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

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

Ответ 22

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

brew link mysql

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

brew unlink mysql
brew switch mysql 5.6.25

Ответ 23

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

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

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