web-dev-qa-db-fra.com

mysql2 gem compilé pour une mauvaise bibliothèque cliente mysql

Lorsque j'essaie de me connecter au serveur mysql via mon Rails, j'obtiens l'erreur suivante

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)

Comment puis-je y remédier?

63
Rahul

J'ai eu le même problème que vous, ou du moins le symptôme était le même.

Contexte: J'utilisais Rails 3, le bijou mysql2 et la version 5.5.21 du serveur de communauté MySQL (32 bits) installés localement sur ma machine Windows. J'ai saisi la bibliothèque cliente (libmysql.dll) à partir de l'installation MySQL et l'ai copié dans mon dossier Ruby installation bin de l'installation).

Quand j'ai couru bundle exec rake db:create, J'ai le même message d'erreur que vous et je me suis dit "Hé, comment la bibliothèque cliente peut-elle être obsolète quand je l'ai reçue de la dernière version de MySQL?"

Un message utile s'affiche lorsque vous gem install mysql2. Malheureusement, si vous installez la gemme avec Bundler, Bundler mange le message. C'est ici:

=========================================================================
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

Suivre ces instructions a résolu le problème pour moi.

Lien référencé

85
antinome

La désinstallation et la réinstallation de la gemme résoudront souvent ce problème sans avoir à télécharger et déplacer les fichiers à la main. Depuis votre répertoire d'application 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.
99
chrislopresto

Si vous utilisez la version 64 bits de mysql et la version 32 bits de Ruby, vérifiez cette solution sur http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64 -et-en-utilisant-Ruby-with-it /

Vous devez essentiellement télécharger un seul connecteur à partir du site Web mysql et compiler mysql ou mysql2 avec le connecteur que vous avez téléchargé.

pour Ruby 1.9.2:

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

pour Ruby 1.9.3: (montrant la variante mysql2)

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

Notez l'utilisation de barres obliques pour le répertoire où MySQL Connector/C a été extrait.

9
user482594

J'ai eu un problème comme celui-ci:

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

Le problème pour moi était que j'avais les deux versions, 5.5.29 et 5.6.17, installées sur ma machine. Je ne sais pas comment. Lorsque je l'ai groupé, il a automatiquement choisi la version 5.5.29. J'ai désinstallé celui-ci, puis réinstallé ma gemme et cela a résolu le problème.

2
Victor Kmita

J'ai découvert une cause complètement différente de ce problème. J'utilisais le bijou mysql. J'ai construit le bijou mysql2 mais j'ai oublié de mettre à jour mon database.yml. Avec la gemme mysql2, il faut dire:

  development:
    adapter: mysql2

plutôt que

  development:
    adapter: mysql

Le bijou a été construit, mais j'ai eu l'erreur lors de la prochaine exécution du râteau.

Évident une fois que vous l'avez vu, mais vous obtenez le même message d'erreur que celui discuté ici!

Soit dit en passant, la commande pour construire la gemme mysql2 sur ma machine était un peu plus compliquée que celle décrite ci-dessus:

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"
1
user1208639

dans mon cas sous Windows, copie incorrectement libmysql.dll du répertoire MySQL Server 5.5 vers Ruby200/bin. correct consiste à copier libmysql.dll à partir de mysql-connector-c-noinstall-6.0.2-win32.

1
user2315251

Pour ajouter à la réponse existante. (plateforme Windows en particulier)

Ruby est vraiment nul. Rails ne devrait pas vraiment se soucier de la version du connecteur ou de la version mysql. - mais c'est mon avis.

Pour que cette chose fonctionne, vous avez besoin de 2 choses. mysql2 gem et libmysql.dll et vous devez les faire correspondre en termes de version. ( cela m'a causé de la confusion, car je peux voir que le dernier connecteur est 6.x alors que mysql n'est que 5.x, comment dois-je les faire correspondre )

gem mysql2. et lorsque vous l'installez, vous devez spécifier le connecteur.

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

il n'est pas nécessaire que le connecteur soit téléchargé depuis Oracle. tout ce dont vous avez besoin est une installation mysql et le dossier libinclude en dessous. puis mettez le libmysql.dll en dessous de railsinstaller bin dossier.

si cela n'a pas fonctionné pour que vous installiez avec succès mysql2 gem => pour mon cas c'est parce que mon mysql est trop ancien (pourquoi serait Ruby s'en soucie)). donc j'obtiens le dernier mysql d'Oracle. utilisez le libincludelibmysql.dll dessous. vous n'avez pas vraiment besoin de mettre à jour votre base de données, vous pouvez la garder quelque part et continuer à l'utiliser après avoir généré les 2 composants requis

mon cas: j'utilise une très ancienne base de données mysql et je ne souhaite pas la mettre à jour pour le moment. donc je sauvegarde cette base de données et la restaure plus tard

1
zinking