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)

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

Ответ 1

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

Фон: я использовал Rails 3, gem mysql2 и сервер сообщества MySQL 5.5.21 (32-разрядный), установленный локально на моей машине Windows. Я схватил клиентскую библиотеку (libmysql.dll) из установки MySQL и скопировал ее в мою папку ruby ​​installation 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 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

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

Ссылка на ссылку

Ответ 2

Удаление и переустановка драгоценного камня часто решает эту проблему, без необходимости загружать и перемещать файлы вручную. Из каталога приложений 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.

Ответ 3

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

Ответ 4

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

  development:
    adapter: mysql2

а не

  development:
    adapter: mysql

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

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

Кстати, команда для сборки gem 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"

Ответ 5

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

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. Я удалил этот, а затем переустановил мой драгоценный камень и исправил проблему.

Ответ 6

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

Ruby действительно сосет на вершине этого. Рельсы не должны действительно заботиться о версии соединителя или версии mysql. - но это мое мнение.

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

mysql2 gem. и когда вы его устанавливаете, вам нужно указать соединитель.

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

ему не нужно быть коннектором, загруженным из oracle. все, что вам нужно - это установка mysql и под ним lib include. затем поместите libmysql.dll в папку railsinstaller bin.

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

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

Ответ 7

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

Ответ 8

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

1:: Загрузите zip следующую ссылку: https://dev.mysql.com/downloads/connector/c/

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

3:: Чтобы запустить команду bundle install

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

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