mysql2 gem скомпилирован для неправильной клиентской библиотеки mysql - PullRequest
62 голосов
/ 05 января 2012

Когда я пытаюсь подключиться к серверу 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 ]

99 голосов
/ 04 марта 2013

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

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

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

Когда я запустил 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

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

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

9 голосов
/ 09 января 2012

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

2 голосов
/ 23 апреля 2014

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

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

1 голос
/ 10 февраля 2015

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

1 голос
/ 07 сентября 2014

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

Ruby действительно ужасен. На самом деле Rails не должен заботиться о версии коннектора или версии 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"

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

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

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

1 голос
/ 07 августа 2013

Я обнаружил совершенно другую причину этой проблемы. Я использовал камень MySQL. Я построил gem 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"
0 голосов
/ 26 июля 2015

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

1 :: Загрузите почтовый индекс по следующей ссылке: https://dev.mysql.com/downloads/connector/c/

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

3 :: Запустите один, чтобы выполнить команду bundle install

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

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

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