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 и lib
include
папка под ним. затем положить libmysql.dll
под railsinstaller bin
папка.
если это не сработало, чтобы вы успешно установили mysql2 gem => для моего случая, то это потому, что мой mysql слишком стар (почему бы это не волновало ruby). поэтому я получаю последнюю версию MySQL от оракула. использовать lib
include
libmysql.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
и готово, решено!