неинициализированная константа MysqlCompat :: MysqlRes (с использованием гема mms2r) - PullRequest
22 голосов
/ 26 августа 2009

переместил мое приложение rails на новый сервер, и ему пришлось установить несколько гем-зависимостей. Однако после установки gem mysql я получаю ошибку, неинициализированную константу MysqlCompat :: MysqlRes, всякий раз, когда я пытаюсь запустить команду rake, которая включает базу данных mysql. Кажется, я получаю эту ошибку только тогда, когда мне требуется гем mms2r. Кто-нибудь когда-нибудь слышал об этом? Я использую mysql 2.8.1 gem.

Ответы [ 25 ]

47 голосов
/ 23 ноября 2009

на моем Mac OS X 10.6 Я сделал это для установки гема 2.8.1, который отлично работал с моим MySQL-сервером MacPorts:

sudo env ARCHFLAGS="-arch x86_64" gem install mysql
26 голосов
/ 17 марта 2011

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

Альтернативный подход - добавить каталог MySQL, содержащий библиотеку, в путь динамической загрузки. Поместив следующее в мой файл .bashrc, я решил проблему:

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
10 голосов
/ 21 августа 2010

Моя проблема была из-за того, что мой "mysql" был 32-битной установкой, а ruby ​​был 64-битной и 32-битной. Проверьте с помощью этих команд

 file `which mysql` 
 file `which ruby`

Оба должны соответствовать 64-битному исполняемому файлу Mach-O x86_64 или 64-битному исполняемому файлу Mach-O i386. Я установил 64-битный MySQL, затем

export ARCHFLAGS="-arch x86_64" ; sudo gem install --no-rdoc --no-ri mysql -v 2.7 -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/mysql/bin/mysql_config

и вуаля!

5 голосов
/ 16 февраля 2011

Если у вас mysql 5.5, выполните следующие действия: http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

FTR: Если бы мне не понадобилось какое-то глупое повторение, чтобы поднять голос, я бы проголосовал за идентичный ответ, считай это моим повышением.

3 голосов
/ 27 августа 2009

Да, я видел подобное сообщение об ошибке, ища тот же несуществующий класс MysqlCompat :: MysqlRes

Как оказалось, этот класс не должен существовать; сообщение об ошибке вызвано проблемой с последним драйвером Mysql. mysql-2.8.1 искал мои библиотеки в каталоге с дополнительным уровнем «mysql» в конце. Например, мои библиотеки (в MacOS X 10.5.8) находятся в / usr / local / mysql / lib, но библиотека mysql.bundle ищет библиотеки MySQL в / usr / local / mysql / lib / mysql ... что не так.

Я нашел это достаточно легко исправить, создав символическую ссылку в / usr / local / mysql / lib с именем «mysql», которая указывает на «.»

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

Кроме того, это может не сработать для вас. Это может сработать, если ваша ошибка выглядит так:

  ./mysql.bundle: dlopen(./mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib (LoadError)
  Referenced from: /Users/ccullen/Projects/npapp-v2/mysql-ruby-2.8.1/mysql.bundle
  Reason: image not found - ./mysql.bundle
    from test.rb:5

Поскольку это, кажется, недавняя разработка, и я не видел никакого прямого ответа на нее, я подумал, что поделюсь, как я это исправил. Удачи:)

2 голосов
/ 01 сентября 2009

Установка правильных ARCHFLAGS при установке (пере) гемов помогла мне ... без каких-либо символических ссылок:

http://joergbattermann.tumblr.com/post/181479575/fixing-the-nameerror-uninitialized-constant

2 голосов
/ 26 июля 2010

С mysql gem (2.8.1) я получаю

неинициализированная константа MysqlCompat :: MysqlRes

Использование -v 2.7 делает его отлично работающим и для тех, кто использовал Homebrew для установки mysql

sudo gem install mysql -v 2.7 - --with-MySQL-конфигурационный = / USR / местные / Подвал / MySQL / 5.1.48 / бен / mysql_config

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

2 голосов
/ 28 августа 2009

gem install -v = 2.7.1 также исправит это.

2 голосов
/ 30 мая 2010

Эта проблема появилась у меня после обновления Ubuntu с 9.10 до 10.04.

Кажется, проблема с самоцветом mysql.

Симптомы: любое использование ActiveRecord, требующее подключения к mysql, приводит к трассировке стека, получаемой из «неинициализированной константы MysqlCompat :: MysqlRes»

Я попробовал "gem update mysql" и обнаружил, что не могу собрать собственные расширения, потому что компилятор не может найти библиотеку mysql_client. Эта библиотека (libmysqlclient.so.16) находится в / usr / lib.

Исправление для Ubuntu 10.04:

Как root, я сделал это:

apt-get install libmysqlclient-dev
gem install mysql

Я замечаю, что несколько разных людей пробуют что-то здесь, и мне интересно, не мы ли определяем причину.

Переменные, которые люди должны уточнить в своих ответах:

  • версия операционной системы - какую версию вы используете?
  • где и как вы установили mysql? - здесь люди, похоже, установили свои mysql из источника в / usr / local (я установил мой через систему пакетов ubuntu)
  • Вы на 64-битной Ubuntu или 32-битной? (я в настоящее время на 32-битной.)
1 голос
/ 20 февраля 2011

Понижение (с 5.9) до mysql 5.1 помогло на 10.6 ... при работе с гемами mysql и mysql2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...