mysql2 gem скомпилирован для неправильной клиентской библиотеки mysql

Когда я пытаюсь подключиться к серверу mysql через мое приложение rails, я получаю следующую ошибку

D:/Program_Files/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': 
Incorrect MySQL client library version! This gem was compiled for 6.0.0 but the client library is 5.0.27. (RuntimeError)

Как я могу исправить это?

8 ответов

Решение

У меня была такая же проблема, как и у вас, или, по крайней мере, симптомы были такими же.

Предыстория: я использовал Rails 3, гем mysql2 и сервер сообщества MySQL версии 5.5.21 (32-битный), установленный локально на моей машине с Windows. Я схватил клиентскую библиотеку (libmysql.dll) из установки MySQL и скопировал его в мою установку ruby bin папка.

Когда я побежал bundle exec rake db:createЯ получил то же сообщение об ошибке, что и вы, и подумал: "Эй, как может быть устаревшая клиентская библиотека, когда я получил ее из последней версии MySQL?"

Там есть полезное сообщение, которое отображается, когда вы gem install mysql2, К сожалению, если вы установите драгоценный камень с Bundler, Bundler съест сообщение. Вот:

=========================================================================
You've installed the binary version of mysql2. It was built using MySQL 
Connector/C version 6.0.2. It's recommended to use the exact same version
to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example
C:\Ruby\bin

Следование этим инструкциям решило проблему для меня.

Ссылочная ссылка

Удаление и переустановка гема часто решают эту проблему без необходимости загружать и перемещать файлы вручную. Из вашего каталога приложений rails:

> gem uninstall mysql2

You have requested to uninstall the gem:
    mysql2-0.3.11
database_cleaner-0.9.1 depends on [mysql2 (>= 0)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  Y
Successfully uninstalled mysql2-0.3.11

> bundle install

Fetching gem metadata from http://rubygems.org/......
Fetching gem metadata from http://rubygems.org/..
Using rake (0.9.2)
Using i18n (0.6.1)
... <SNIP> ...
Installing mysql2 (0.3.11) with native extensions
... <SNIP> ...
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

Если вы используете 64-разрядную версию mysql и 32-разрядную версию ruby, проверьте это решение по http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64-and-using-ruby-with-it/

В основном вам нужно скачать один соединитель с веб-сайта mysql и скомпилировать mysql или mysql2 с загруженным вами соединителем.

для Ruby 1.9.2:

gem install mysql --platform=ruby -- --with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32

для Ruby 1.9.3: (показывает вариант mysql2)

gem pristine mysql2 -- --with-mysql-config=C:\mysql-connector-c-noinstall-6.0.2-win32    

Обратите внимание на использование прямой косой черты для каталога, в который был извлечен MySQL Connector/C.

У меня была проблема, как это:

Incorrect MySQL client library version! This gem was compiled for 5.5.29 but the client library is 5.6.17.

Проблема для меня заключалась в том, что на моей машине были установлены обе версии, 5.5.29 и 5.6.17. Понятия не имею как. Когда я в комплекте, он автоматически выбрал версию 5.5.29. Я удалил этот, а затем переустановил свой драгоценный камень, и это решило проблему.

Добавить к существующему ответу. (специально для платформы Windows)

Руби действительно сосет поверх этого. На самом деле Rails не должен заботиться о версии коннектора или версии mysql. - но это мое мнение.

Чтобы эта ** вещь работала, вам нужно 2 вещи. mysql2 gem а также libmysql.dll и вам нужно сопоставить их с точки зрения версии. (это вызвало у меня замешательство, потому что я вижу, что последний соединитель - 6.x, а mysql - только 5.x, как мне их сопоставить)

MySQL драгоценный камень. и при установке вам нужно указать разъем.

     gem install mysql2 --platform=ruby -- 
     --with-mysql-lib="d:\mysql\lib" --with-mysql-include="d:\mysql\include"

это не должен быть соединитель, загруженный от оракула. все, что вам нужно, это установка MySQL и libinclude папка под ним. затем положить libmysql.dll под railsinstaller bin папка.

если это не сработало, чтобы вы успешно установили mysql2 gem => для моего случая, то это потому, что мой mysql слишком стар (почему бы это не волновало ruby). поэтому я получаю последнюю версию MySQL от оракула. использовать libincludelibmysql.dll под ним. вам на самом деле не нужно обновлять базу данных, вы можете хранить ее где-то и продолжать использовать после того, как вы сгенерировали 2 обязательных компонента

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

Я обнаружил совершенно другую причину этой проблемы. Я использовал камень MySQL. Я построил драгоценный камень mysql2, но я забыл обновить свой database.yml. С самоцветом mysql2 нужно сказать:

  development:
    adapter: mysql2

скорее, чем

  development:
    adapter: mysql

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

Очевидно, когда вы это увидели, но вы получите то же сообщение об ошибке, что и здесь!

Кстати, команда для сборки гема mysql2 на моей машине была немного сложнее, чем описано выше:

gem install mysql2 -- --with-mysql-lib="c:\mysql-connector-c-noinstall-6.0.2-win32\lib"  --with-mysql-include="c:\mysql-connector-c-noinstall-6.0.2-win32\include" --with-mysql-dir="c:\mysql-connector-c-noinstall-6.0.2-win32"

В моем случае на windows неправильно скопировал libmysql.dll из каталога MySQL Server 5.5 в ruby200/bin. правильно скопировать libmysql.dll из mysql-connector-c-noinstall-6.0.2-win32.

У меня была такая же проблема, и я решил следующее:

1:: Скачать по следующей ссылке: https://dev.mysql.com/downloads/connector/c/

2:: распаковать файл (libmysql.dll) в папку " Provider" проекта.

3:: Volve One для запуска команды bundle install

и готово, решено!

https://dev.mysql.com/downloads/connector/c/

Другие вопросы по тегам