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

212

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

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

Теги:
rubygems
webrick

23 ответа

371

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

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
  • 11
    Это самый простой и правильный способ решения этой проблемы.
  • 2
    это отлично сработало для меня - спасибо, Лювис!
Показать ещё 21 комментарий
90

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

Добавьте следующее к вашему ~/.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
    работал на меня под OSX LION
  • 0
    Это работало для меня и под OS X Lion. Спасибо. :)
Показать ещё 3 комментария
88

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

Я снова установил 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.
  • 2
    Спасибо, это сделало это для меня. А для других с такой же проблемой, если вы используете rvm, тогда пропустите sudo, иначе права доступа, вероятно, изменятся.
Показать ещё 9 комментариев
34

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

gem pristine mysql2

  • 1
    +1, у меня сработало, спасибо.
  • 0
    Не помогло мне
Показать ещё 2 комментария
25

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

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

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

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

23

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

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

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

  • 0
    Работает как шарм!
  • 0
    Этот все еще работает.
Показать ещё 1 комментарий
16

В 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
  • 0
    Рад, что это помогло кому-то. : D
Показать ещё 2 комментария
13

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

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

  • 1
    Это то, что исправило мою проблему. Спасибо!
  • 0
    Исправил мой тоже!
10

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

  • 1
    На моей машине под управлением Mavericks я удалил все версии gem mysql2 с помощью gem uninstall mysql2 и отвечал на All versions в приглашении. Затем я запустил обновление brew mysql, а затем установил gem 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 Рассылка 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

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

  • 0
    Unknown switches '--force'
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

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

3

Привет, он работал у меня по рекомендованной ссылке от 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, в команде, спасибо

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)
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).

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

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

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

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

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

2

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

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

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

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

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

1

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

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

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

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

rvm use <yourrubie>

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

cd ~/myprojectpath

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

bundle install
0

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

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

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

0

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

brew link mysql

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

brew unlink mysql
brew switch mysql 5.6.25

Ещё вопросы

Сообщество Overcoder
Наверх
Меню