Подтвердить что ты не робот

Ruby: mysql2-Gem не работает (Mac OS X Snow Leopard, Ruby 1.9.2)

Я только что скомпилировал 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-code?

4b9b3361

Ответ 2

Это, по-видимому, известная ошибка (и нефиксированная!) в бинарном дистрибутиве 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

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

Ответ 3

Если вы используете 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

Замените USERNAME в синтаксисе соответствующим образом в соответствии с вашей текущей настройкой. И если ваша версия mysql gem отличается от других, это также.

Ответ 4

Лучшей альтернативой инструменту install_name является добавление пути к mysql lib в переменную окружения 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

Ответ 5

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

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

Ответ 6

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

rvm use [email protected] --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 

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