it-swarm.com.de

mysql2 gem wurde für die falsche mysql client library kompiliert

Wenn ich versuche, über meine Rails -Anwendung eine Verbindung zum MySQL-Server herzustellen, wird die folgende Fehlermeldung angezeigt

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)

Wie kann ich das beheben?

63
Rahul

Ich hatte das gleiche Problem wie Sie, oder zumindest war das Symptom das gleiche.

Hintergrund: Ich habe Rails 3, das gem mysql2, und MySQL Community Server Version 5.5.21 (32-Bit) verwendet, die lokal auf meinem Windows-Computer installiert sind. Ich habe die Client-Bibliothek (libmysql.dll) Aus der MySQL-Installation geholt und in den Ordner bin meiner Ruby -Installation kopiert.

Als ich bundle exec rake db:create Ausführte, bekam ich dieselbe Fehlermeldung wie Sie und dachte: "Hey, wie kann die Client-Bibliothek veraltet sein, wenn ich sie aus der neuesten MySQL-Version habe?"

Es gibt eine hilfreiche Nachricht, die angezeigt wird, wenn Sie gem install mysql2. Leider, wenn Sie das Juwel mit Bundler installieren, frisst Bundler die Nachricht. Hier ist es:

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

Das Befolgen dieser Anweisungen löste das Problem für mich.

Verweislink

85
antinome

Durch Deinstallieren und erneutes Installieren des Gems wird dieses Problem häufig behoben, ohne dass Dateien von Hand heruntergeladen und verschoben werden müssen. Aus Ihrem Rails App-Verzeichnis:

> 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

Wenn Sie eine 64-Bit-Version von MySQL und eine 32-Bit-Version von Ruby verwenden, lesen Sie diese Lösung unter http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64) -und-mit-Ruby-mit-ihm /

Grundsätzlich müssen Sie einen einzelnen Connector von der MySQL-Website herunterladen und MySQL oder MySQL2 mit dem von Ihnen heruntergeladenen Connector kompilieren.

für Ruby 1.9.2:

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

für Ruby 1.9.3: (zeigt die mysql2-Variante)

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

Beachten Sie die Verwendung von Schrägstrichen für das Verzeichnis, in das MySQL Connector/C extrahiert wurde.

9
user482594

Ich hatte ein Problem wie dieses:

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

Das Problem für mich war, dass ich beide Versionen 5.5.29 und 5.6.17 auf meinem Computer installiert hatte. Ich habe keine Ahnung wie. Als ich gebündelt habe, wählte es automatisch die Version 5.5.29. Ich habe diesen deinstalliert und dann meinen Edelstein neu installiert und damit das Problem behoben.

2
Victor Kmita

Ich habe eine ganz andere Ursache für dieses Problem entdeckt. Ich hatte den MySQL-Edelstein verwendet. Ich habe den mysql2-Edelstein erstellt, aber vergessen, meine database.yml zu aktualisieren. Mit dem mysql2-Edelstein muss es sagen:

  development:
    adapter: mysql2

eher, als

  development:
    adapter: mysql

Der Edelstein wurde gebaut, aber ich bekam den Fehler, als ich das nächste Mal Rechen lief.

Sobald Sie es gesehen haben, erscheint die gleiche Fehlermeldung wie hier beschrieben!

Übrigens war der Befehl zum Erstellen des mysql2-Gems auf meinem Computer etwas komplizierter als oben beschrieben:

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

in meinem Fall unter Windows wurde libmysql.dll fälschlicherweise aus dem MySQL Server 5.5-Verzeichnis nach Ruby200/bin kopiert. Richtig ist, libmysql.dll von mysql-connector-c-noinstall-6.0.2-win32 zu kopieren.

1
user2315251

Zur vorhandenen Antwort hinzufügen. (Windows-Plattform speziell)

Ruby saugt wirklich darüber. Rails sollte sich eigentlich nicht um die Version des Connectors oder der MySQL-Version kümmern. - aber das ist meine Meinung.

Um dieses Ding zum Laufen zu bringen, brauchst du 2 Dinge. mysql2 gem und libmysql.dll und Sie müssen sie in Bezug auf die Version abgleichen. ( Das hat mich verwirrt, weil ich sehe, dass der neueste Connector 6.x ist, während MySQL nur 5.x ist. Wie soll ich sie zuordnen? )

mysql2 gem. und wenn Sie es installieren, müssen Sie den Connector angeben.

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

es muss kein Connector von Oracle heruntergeladen werden. Alles, was Sie brauchen, ist eine MySQL-Installation und der Ordner libinclude darunter. dann setzen Sie die libmysql.dll unter railsinstaller bin Mappe.

wenn es nicht geklappt hat, dass Sie mysql2 gem erfolgreich installiert haben => für meinen Fall liegt es daran, dass mein mysql zu alt ist (warum sollte Ruby das kümmern)). Daher bekomme ich von Oracle die neueste Version von MySQL. Verwenden Sie die Zeichenfolge libincludelibmysql.dll darunter. Sie müssen Ihre Datenbank nicht wirklich aktualisieren, sondern können sie irgendwo aufbewahren und weiter verwenden, nachdem Sie die 2 erforderlichen Komponenten generiert haben

mein Fall: Ich verwende eine sehr alte MySQL-Datenbank und bin momentan nicht bereit, sie zu aktualisieren. Also habe ich diese Datenbank gesichert und später wiederhergestellt

1
zinking