2010-12-22 2 views
36

Я получаю следующее сообщение об ошибке, когда я начинаю рельсы сервера:рельсы сервер не запускается с помощью mysql2 РВМ и Руби 1.9.2-p0 на OSX 10.6.5

$ rails server 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require':  dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) 
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle 
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-  
0.2.6/lib/mysql2/mysql2.bundle 

Я установил mysql2 с следующая команда после команды использование РВМ рубиново-1.9.2-p0:

$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config 
Building native extensions. This could take a while... 
Successfully installed mysql2-0.2.6 
1 gem installed 
Installing ri documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 
Installing RDoc documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 

у меня есть mysql2 в моей Gemfile, а также в файле database.yml и перевяжите установки завершает тонкую

$ bundle show mysql2 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6 

Насколько я понимаю, ошибка сервера rails объясняется тем, что он не знает местоположение mysql_config на OSX, однако на gem install я указал правильное местоположение. Тем не менее, камень RVM не уважает местоположение mysql_config.

У кого-нибудь есть решение?

ответ

22

Я нашел ответ здесь: Mysql 5.5, Snow leopard and rails

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
+1

Проблема с этим решение заключается в том, что каждый раз, когда вы (повторно) устанавливаете драгоценный камень (один пример: в другом стиле RVM), вам придется повторить команду 'install_name_tool'. Ответ Себастьяна, который ссылается на мое сообщение в блоге, на мой взгляд предлагает более чистое решение. –

+0

Обратите внимание, что версия библиотеки также изменится - на данный момент это libmysqlclient.18.dylib (а не 16), которая должна быть размещена в обоих местах выше. – scotchi

5

Билл,

ответ Фредерика будет решить эту проблему, однако вы, возможно, придется изменить некоторые пункты в команде в зависимости от версий и как вещи названы в вашей системе.

Например, в последней версии mysql libmysqlclient.16.dylib на самом деле libmysqlclient.18.dylib. Попробуйте делать:

locate libmysqlclient.18.dylib 

Если это не возвращает путь, который вы можете пойти:

/usr/local/{your-mysql}/lib 

, чтобы найти файл. Затем просто PWD, чтобы найти правильный каталог для команды.

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

rvm info 

Например, моя установка 1.9.2 рубин-1.9.2.p180, не рубиново-1.9.2p0. Это также нужно будет изменить в команде Frederics.

Итак, для меня команда Фредерика стала для фиксации РВМ рубины для 1.8.7 и 1.9.2, соответственно:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
63

Проблема возникает из mysql2 жемчужину отсутствующего динамическую библиотеку из MySQL.

Для более чистого решения, чем install_name_tool ..., необходимо обновить DYLD_LIBRARY_PATH, чтобы добавить к нему MySQL. Чтобы сделать это, обновить ~/.bash_profile, чтобы добавить папку библиотеки MySQL:

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

Примечание: Вы можете обновить расположение MySQL, основанный на загрузочную

Это должно держать вещи в чистоте, но и убедиться, что любой драгоценный камень или код, требующий динамических библиотек MySQL, найдут их.

Ссылка: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Ссылка Обновление июля 2012: Изменение в OS X 10.8 делает легкий метод выше менее элегантно. Если установить эту переменную, каждый раз, когда вы запускаете Setuid или setgid программу, вы получите предупреждение о STDERR:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

Рубиновые разработчики, использующие Phusion Пассажирское Standalone увидите это сообщение, отображаемое в своей консоли каждые пять секунд. Это очень раздражает, очень быстро.

Я подал ошибку с Apple. Это также в OpenRadar.

В то же время, есть и третий способ решить проблему пути библиотеки клиент, который не требует установки DYLD_LIBRARY_PATH (работы вокруг этого вопроса 10.8) или взлом .bundle файлов с install_name_tool:

$ brew install mysql 
+0

работает для меня с RVM, Gemset и так далее. –

+0

Это не сработает, если вы используете pow или пассажира, используйте ответ Фредерика выше, чтобы заставить его работать ... обязательно запустите его в папке «ext» в gem basedir, а также – concept47

+0

Сделал трюк для меня OSX 10.7, rvm ruby ​​1.9.3; благодаря! – marcgg

0

Вот то, что я делаю (по аналогии с другими)

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle 
1

шахта была в другом месте, я должен был использовать:

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

ниже с помощью: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Обновление июля 2012:

Изменение в OS X 10.8 делает легкий метод выше менее элегантно. Если установить эту переменную, каждый раз, когда вы запускаете Setuid или setgid программу, вы получите предупреждение о STDERR:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

Рубиновые разработчики, использующие Phusion Пассажирское Standalone увидите это сообщение, отображаемое в своей консоли каждые пять секунд. Это очень раздражает, очень быстро.

Я подал ошибку с Apple. Это также в OpenRadar.

В то же время, есть и третий способ решить проблему пути библиотеки клиент, который не требует установки DYLD_LIBRARY_PATH (работы вокруг этого вопроса 10.8) или взлом .bundle файлов с install_name_tool:

$ brew install mysql 
8

В OS X 10.8 (Mountain Lion) перечисленные ответы имеют все проблемы, как указано в ответах и ​​комментариях.

  • Установка DYLD_LIBRARY_PATH включать/USR/местные/MySQL/LIB дает предупреждения от OS X и от самогона
  • Использование install_name_tool взломать, где драгоценный камень бинарные взгляды должны были бы быть переделано каждый раз, когда установлен камень или модернизированы.
  • Переключиться на mysql brew может не работать; и в любом случае я не хочу, чтобы перенастроить уже работающие установки

Более простой и надежные ИМХО решения поставить ссылку на библиотеку по умолчанию в динамическом пути поиска библиотек, который удобно включает в себя /usr/local/lib в.То есть:

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

фантастический, я пробовал все вышеперечисленное, и этот сразу сработал – ttati

+0

Работал для меня тоже, спасибо! – thomallen

0

Я застрял на этом какое-то время и пришел к другому решению.

Обратите внимание, как недостающая библиотека версия 16:

Библиотека не загружен: libmysqlclient.16.dylib (LoadError)

Оказывается, у меня была версия 20 этой библиотеки - libmysqlclient.20.dylib

У меня был gem 'mysql2' в моем Gemfile, но мне нужно было удалить камень, gem uninstall mysql (у меня было несколько ve rsions gem), а затем сделать новый bundle install, чтобы получить только версию, которая мне нужна из этой библиотеки.

После этого он искал - и нашел - правильную версию этой библиотеки.

0

Модернизированный MySQL до последней версии и переустановка mysql2 камень работает для меня brew upgrade mysql gem uninstall mysql2 gem install mysql2

КСТАТИ: Моя версия MySQL является 5.7.18, mysql2 камень версия 0.4.5

Смежные вопросы