Ruby: mysql2-Gem не работает (Mac OS X Snow Leopard, Ruby 1.9.2) - PullRequest
24 голосов
/ 27 марта 2011

Я только что скомпилировал ruby ​​и установил rubygems, mysql2 и rails, которые работали довольно хорошо. Но я получаю следующее сообщение об ошибке всякий раз, когда я пытаюсь запустить сервер rails:

/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:120:in `require'
  from /Users/filzo/Documents/rails/blog/config/application.rb:7:in `'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `require'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `block in '
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `tap'
  from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `'
  from script/rails:6:in `require'
  from script/rails:6:in `'

Я пробовал несколько возможных решений (например, это: http://railsforum.com/viewtopic.php?pid=23125#23125 с libmysqlclient.18.dylib); но у меня ничего не получалось. Я надеюсь, что вы можете мне помочь.

EDIT: Похоже, это решило проблему для меня:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

Во всяком случае; это ошибка в MySQL или код ruby?

Ответы [ 6 ]

32 голосов
/ 02 августа 2011

Один из простых и лучших способов - создать программную ссылку по команде -

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

http://rorguide.blogspot.com/2011/07/getting-error-library-not-loaded.html

15 голосов
/ 01 февраля 2012

Это, похоже, известная (и нефиксированная!) ошибка в двоичном дистрибутиве MySQL .

Во время работы install_name_tool в ваших файлах mysql2.bundle будет работать, если вы удалитеи восстановить их, вы вернулись на круги своя.Кроме того, вам придется применить это исправление ко всему, что ссылается на него.Лучшее решение состоит в том, чтобы исправить проблему в самой библиотеке:

$ sudo install_name_tool -id \
  /usr/local/mysql/lib/libmysqlclient.18.dylib \
  /usr/local/mysql-5.5.12-osx10.6-x86_64/lib/libmysqlclient.18.dylib

Удаление и перестройка гема mysql2:

$ gem uninstall mysql2
$ gem install mysql2

... приведет к изменению библиотеки,и все должно работать правильно, без необходимости возиться с какими-либо переменными среды.

13 голосов
/ 03 апреля 2011

Если вы используете RVM (отличный выбор) в Mac OS X - вот волшебная команда, которая наконец-то сработала для меня.

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Users/*USERNAME*/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Замените ИМЯ ПОЛЬЗОВАТЕЛЯ в синтаксисе в соответствии с текущей настройкой. И если ваша версия mysql gem отличается, измените это.

4 голосов
/ 09 ноября 2011

Лучшая альтернатива инструменту install_name - добавить путь к библиотеке mysql в переменную окружения DYLD_LIBRARY_PATH.В / etc / profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

Или, поскольку у меня также установлен Oracle Instant Client, выполните:

export ORACLE_HOME="/usr/local/oracle/instantclient_10_2"
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib
3 голосов
/ 09 августа 2011

Попробуйте создать эту символическую ссылку, чтобы rake мог найти правильную клиентскую библиотеку MySQL.

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

2 голосов
/ 27 сентября 2011

Я не уверен, поможет ли это или нет, но я использую OS X 10.7.1 Lion. В моем случае я открыл окно терминала, зашел в /Library/Ruby/Gems/1.8/gems/mysql2-0.3.7 и как только рявкнул RVM, сказав, что обнаружил новый или измененный файл .rvmrc. Содержимое этого файла было:

rvm use 1.9.2@mysql2 --create

Он спросил, хочу ли я доверять этому файлу .rvmc. Я сказал да, и он вернул следующее:

Using /Users/dan/.rvm/gems/ruby-1.9.2-p290 with gemset mysql2

После этого я выполнил следующую команду:

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

Как только я это сделал, я собирался идти. Надеюсь, это поможет!

...