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

Проблема с установкой mysql gem на Snow Leopard: неинициализированная константа MysqlCompat:: MysqlRes

У меня возникла проблема с установкой драйвера gem Ruby mysql.

Недавно я обновился до Snow Leopard и сделал ручную установку MySQL в Hivelogic. Все это работает нормально, поскольку я могу получить доступ к mysql из командной строки и внести изменения в базу данных.

Моя проблема в том, что если я сейчас использую

rake db:migrate 

Я получаю:

rake aborted!
uninitialized constant MysqlCompat::MysqlRes

(See full trace by running task with --trace)

Теперь кажется, что мой mysql gem работает некорректно, поскольку я могу получить доступ к MySQL с Python с помощью драйвера Python (который я скомпилировал). Поэтому я попытался перестроить драгоценный камень, используя следующую команду с этого сайта: http://techliberty.blogspot.com/ (кстати, я использую недавний Intel MacBook Pro)

  sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Это компилируется, хотя я не получаю определение для документации:

  Building native extensions.  This could take a while...
  Successfully installed mysql-2.8.1
  1 gem installed
  Installing ri documentation for mysql-2.8.1...

  No definition for next_result

  No definition for field_name
  ...

Я немного озадачен тем, что мой mysql_config находится в нужном месте:

 /usr/local/mysql/bin/mysql_config

И я удалил все остальные экземпляры gem mysql из своей системы.

Любые предложения были бы весьма признательны. Большое спасибо.

PS Я видел этот предыдущий пост uninitialized constant MysqlCompat:: MysqlRes (с использованием mms2r gem), но он не кажется применимым для моей версии.

4b9b3361

Ответ 1

ОК, я наконец-то решил эту проблему.

Это произошло потому, что у меня были установлены две версии Ruby.

  1. Я скомпилировал и установил свою собственную версию Ruby, следуя рекомендациям HiveLogic, до моей установки Snow Leopard.
  2. Затем я обновился до Snow Leopard (который имеет собственную версию Ruby)

Эти две версии противоречили друг другу и означали, что когда я пытался установить гем MySQL с правильными ARCHFLAGS, система думала, что я использую другую версию Ruby.

Исправление было достаточно простым:

  1. Удалите версию Ruby HiveLogic (https://content.pivotal.io/blog/removing-old-ruby-source-installation-after-a-leopard-upgrade)
  2. Перекомпилируйте гем MySQL с правильными ARCHFLAGS:

    sudo env ARCHFLAGS = "-arch x86_64" gem install --no-rdoc --no-ri mysql - --with-mysql-config =/usr/local/mysql/bin/mysql_config

Как только я это сделал, все работало нормально.

Ответ 2

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

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

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

Ответ 3

После борьбы с этой проблемой в течение нескольких дней я наконец-то ее пригвоздил. 2 вещи, которые я сделал, заставили это работать:

  • sudo env ARCHFLAGS = "- arch x86_64" gem install --no-rdoc --no-ri mysql - --with-mysql-config =/usr/local/mysql/bin/mysql_config
  • export DYLD_LIBRARY_PATH = "/usr/local/mysql/lib: $DYLD_LIBRARY_PATH"

Я немного удивлен, что № 2 упоминался только Стивеном Чанином.

Я на Snow Leopard и имею только 1 MySQL (x86_64) 5.5 и 1 ruby ​​(предварительно упакованный с Snow Leopard).

Ответ 4

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

file `which mysql`
file `which ruby`

Оба должны совпадать с 64-битным исполняемым исполняемым файлом x86_64 Mach-O или 64-битным исполняемым файлом i386 от Mach-O. Я установил 32-разрядный mysql, переустановил рубин из источника и рельсов, и с тех пор все работает безупречно. Я нахожусь на Leopard btw.

Ответ 5

Я применил инструкции hivelogic post, но с версией 5.1.41 MySQL. И для установки gem я сделал 2 вещи:

sudo gem uninstall mysql
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

И все отлично поработало для меня.

Ответ 6

Такая же проблема здесь; боролись с этим и продолжали более двух недель!

Я не эксперт ROR, но из других более знающих людей, которые нашли решение, проблема, похоже, указывает на Ruby Gem для mysql, который, по-видимому, неправильно устанавливает себя на Mac.

Я продолжу расследование на сайте Ruby Forge и узнаю, могут ли какие-либо Ruby Gem гуру исправить эту ужасную ошибку.... Мне нужны мои Rails! Время - деньги!

Итак, я сообщил об этой ошибке на странице страницы отслеживания ошибок разработчиков RubyForge Mysql.

Я надеюсь, что они могут помочь, так как это вредит моему текущему проекту.

И если кто-то еще может поддержать мой отчет об ошибке там, возможно, он получит больше внимания; пожалуйста, звоните!

Ответ 7

После того, как я столкнулся с этой проблемой, я тоже обнаружил, что проблема связана с несколькими двоичными файлами одной и той же версии mysql gem. Для меня это было исправлено.

gem uninstall mysql
Select gem to uninstall:
 1. mysql-2.8.1
 2. mysql-2.8.1
 3. All versions
> 3

Successfully uninstalled mysql-2.8.1
Successfully uninstalled mysql-2.8.1

Затем я перекомпилировал gem mysql из исходного кода на моей машине Snow Leopard, и все было разбухано с миром.

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql-5.1.46-osx10.6-x86_64/bin/mysql_config

Ответ 9

Если вы используете MySQL 5.5, это шаги, которые заставили его работать для нас:

Команда для установки mysql-2.8.1:

sudo env ARCHFLAGS="-arch x86_64" gem install --no-rdoc --no-ri  mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Команда, чтобы заставить mysql-2.8.1 работать с mysql 5.5:

sudo ln -s ../mysql/lib/libmysqlclient.16.dylib libmysqlclient.16.dylib

Надеюсь, что это поможет!

Ответ 10

Есть вероятность, что вы выполнили вышеуказанные инструкции, но забыли переустановить сервер, прежде чем переустанавливать Mysql. Это не приведет к исчезновению сообщения об ошибке. Это случилось со мной.

Попробовав все различные варианты, я попробовал следующее:

ps aux | grep 'mysql'

kill [pid_number_for_mysql]

В основном, убить сервер.. трудный путь. Затем перезапустите сервер.

Ответ 11

Я работал довольно сложно, чтобы это разрешилось в последний день, и я, наконец, понял это. Я бегу снежный барс, а новые рельсы и mysql устанавливают. Единственный способ, которым я работал, это установить 64-битную версию mysql из dmg (не macports) и перезагрузить мою машину в режиме 64 бит, удерживая клавиши "6" и "4" во время загрузки. Затем я установил жемчужину, установил свой хост БД на локальный, и он работал как чемпион.

Ответ 12

Несколько проблем были связаны с устаревшими или множественными конфликтующими двоичными файлами рубинов и драгоценных камней. У меня возникла проблема "прозрачно" скомпилировать драгоценный камень mysql с рубином системы, пытаясь заставить мой код работать с ruby ​​1.9. После выяснения проблемы благодаря этой теме все прошло гладко.

Чтобы избежать этих проблем и для записей, инструментарий RVM может быть очень удобным: http://rvm.beginrescueend.com. Он помогает правильно управлять несколькими версиями ruby, и он умело управляет драгоценными камнями для всех версий без сохранения копии для каждой версии.

Кажется, что использование RVM может помочь избежать некоторых проблем в этом потоке.

Ответ 13

Если кто-то использует rvm с ruby ​​1.8.7 и mysql x86 (32-разрядная версия) и имеет эту проблему. Вы найдете эту ссылку полезной: http://rvm.beginrescueend.com/integration/databases/. Вам нужно будет установить mysql в версии x86_64, а затем установить gem mysql с флагов, установленными на x86_64. Причина в том, что даже вы пытаетесь установить драгоценный камень как x86 в соответствии с вашим mysql x86. Однако рубиновая версия имеет 64 бита. Поэтому вам действительно нужно иметь все три соответствия: Ruby, mysql и mysql. Таким образом, проще всего иметь все из них в 64 бит.

Ответ 14

Очень быстрое решение для меня.

Эта проблема снова появилась у меня на этой неделе на машине для разработки, которую я раньше не использовал. В соответствии с Шагом 2 начального отклика emson требуется только перекомпиляция MySQL-грамма с правильными ARCHFLAGS:

sudo env ARCHFLAGS="-arch x86_64" gem install --no-rdoc --no-ri mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Ответ 15

У меня была эта или, по крайней мере, аналогичная проблема (Hivelogic не участвовал, и это был не апгрейд, а скорее новая система). Я согласен, что это, вероятно, 64-разрядная проблема. У меня есть ссылка для вас, что после того, как все остальные головы и почесывания я сделал, наконец, спас мою задницу (и мозг).

[http://forums.mysql.com/read.php?116,359591,359591]

Удачи, пропустив эту конфигурацию BS и на некоторое кодирование.

Ответ 16

После долгого поиска решения этой конкретной проблемы и тестирования всех вышеперечисленных параметров (и параметров на многих других сайтах) без удачи, я удалил установку mysql-5.1 и установил mysql-5.1. Внезапно, и с небольшим количеством приведенной выше справки для компиляции 64-битных версий, мне наконец удалось установить рабочий камень mysql.

Итак, если вы столкнулись с этой проблемой и запустили mysql 5.5, попробуйте унизиться к mysql 5.1.

Ответ 17

У меня была такая же проблема. Я установил mysql (в моем случае, 5.1.48 64-bit для Snow Leopard) в /usr/local/mysql/current/, а не в /usr/local/mysql. Однако в библиотеке shard mysql-клиента (libmysqlclient.16.dylib) был указан путь /usr/local/mysql/lib/libmysqlclient.16.dylib.

После нескольких неудачных попыток исправить это с помощью install_name_tool, то, что работало, было как для изменения пути в общей библиотеке следующим образом, так и для восстановления mysql 2.8.1 rubygem с указанием как my:

# change the path embedded in libmysqlclient.dylib
sudo install_name_tool -change /usr/local/mysql/lib/libmysqlclient.16.dylib  /usr/local/mysql/current/lib/libmysqlclient.16.dylib /usr/local/mysql/current/lib/libmysqlclient.16.dylib

# reinstall the mysql gem
sudo ARCHFLAGS="-arch i386 -arch x86_64" gem install --no-rdoc --no-ri mysql -- --with-mysql-dir=/usr/local/mysql/current --with-mysql-config=/usr/local/mysql/current/bin/mysql_config

Обратите внимание, что это связано с тем, что mysql установлен в /usr/local/mysql/current, вам нужно отредактировать пути, подходящие для вашей системы.