2012-01-05 9 views
61

Cuando intento para conectar con el servidor MySQL a través de mi solicitud rieles, me sale el siguiente errormysql2 joya compilado para la biblioteca cliente de MySQL mal

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) 

¿Cómo puedo corregirlo?

Respuesta

85

Tuve el mismo problema que tú, o al menos el síntoma fue el mismo.

Antecedentes: estaba usando Rails 3, la gema mysql2, y la versión 5.5.21 (32 bits) del servidor de la comunidad MySQL instalada localmente en mi máquina con Windows. Agarré la biblioteca del cliente (libmysql.dll) de la instalación de MySQL y la copié en la carpeta bin de mi instalación ruby.

Cuando ejecuté bundle exec rake db:create, recibí el mismo mensaje de error que tú y pensé "Oye, ¿cómo puede la biblioteca del cliente estar obsoleta cuando la obtuve de la última versión de MySQL?"

Hay un mensaje útil que se muestra cuando gem install mysql2. Desafortunadamente, si instala la gema con Bundler, Bundler come el mensaje. Aquí está:

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

Siguiendo estas instrucciones me solucionó el problema.

Referenced link

+0

Esto es importante, ya que es un problema que me he encontrado en varias ocasiones, gracias por salvarme la frustración de un día. – slotishtype

+6

Esto funcionó para mí, con la excepción de que la ubicación de descarga está rota. Nueva página de descarga http://dev.mysql.com/downloads/connector/c/. Seleccione "Windows (x86, 32 bits), archivo ZIP" – Spiralis

+0

Esto también me funcionó. Ejecuté la instalación de gem mysql2 y me dio la última URL para descargar libmysql.dll. Thx –

9

Si está utilizando la versión de 64 bits de MySQL y la versión de 32 bits de rubí, a continuación, comprobar esta solución en http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64-and-using-ruby-with-it/

Es, básicamente, tiene que descargar un solo conector de la página web de MySQL, y compilar MySQL o mysql2 con conector que ha descargado.

por Ruby 1.9.2:

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

por Ruby 1.9.3: (mostrando variante mysql2)

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

Nota el uso de barras diagonales para el directorio en el MySQL Connector/C era extraído.

98

desinstalación y reinstalación de la gema a menudo va a resolver este problema sin necesidad de descargar y mover archivos a mano. Desde el directorio de la aplicación de rieles:

> 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. 
+13

. Fácilmente la mejor respuesta. – anxiety

+1

¡Esta es la manera más fácil de solucionar este problema! – Benedikt

+0

esto funciona muy bien. También tengo que hacer: sudo bundle install para compilar mysql. –

1

Descubrí una causa completamente diferente para este problema. He estado usando la gema mysql. Creé la gema mysql2 pero olvidé actualizar mi database.yml. Con la gema mysql2, tiene que decir:

development: 
    adapter: mysql2 

en lugar de

development: 
    adapter: mysql 

La joya construida, pero me dio el error cuando me encontré al lado rastrillo.

Obvio una vez que lo has visto, pero obtienes el mismo mensaje de error que se trata aquí.

Por cierto, el comando para construir la gema mysql2 en mi máquina era un poco más complicado de lo descrito anteriormente:

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

tuve un problema como este:

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

El El problema para mí fue que tenía ambas versiones, 5.5.29 y 5.6.17, instaladas en mi máquina. No tengo idea de cómo. Cuando lo incluí, eligió automáticamente la versión 5.5.29. Desinstalé ese y luego reinstalé mi gema y eso solucionó el problema.

1

Para Agregar a la respuesta existente. (plataforma de Windows específicamente)

Ruby realmente apesta por encima de esto. A Rails no debería importarle la versión del conector o la versión de mysql. - pero esa es mi opinión.

Para que esto funcione, necesita 2 cosas. mysql2 gem y libmysql.dll y necesita emparejarlos en términos de la versión. (esto causó confusión para mí, porque puedo ver más conector es 6.x, mientras que MySQL 5.x es única, ¿cómo debería coincidir con ellas)

mysql2 joya. y cuando lo instales, debes especificar el conector.

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

que no necesita ser descargado de conector oráculo. todo lo que necesita es una instalación de MySQL y la carpeta libinclude debajo de ella. luego ponga el libmysql.dll debajo de la carpeta railsinstaller bin.

si no funcionaba para que se instale mysql2 joya con éxito => para mi caso es porque mi MySQL es demasiado viejo (¿por qué rubí cuidado de que). entonces obtengo el último mysql de Oracle. utilice el libincludelibmysql.dll debajo de él. que realmente no necesita actualizar su base de datos, se puede mantener en algún lugar y seguir utilizándolo después de que haya generado los 2 componentes necesarios

mi caso: yo uso una base de datos MySQL muy antigua y no estoy dispuesto a actualízala en este momento. entonces respaldo esa base de datos y la restauré más tarde

1

en mi caso en windows, copié incorrectamente libmysql.dll del directorio de MySQL Server 5.5 a ruby200/bin. correcto es copiar libmysql.dll de mysql-connector-c-noinstall-6.0.2-win32.

+0

Creo que esto es relevante, pero tuve la experiencia exactamente opuesta. Tuve que usar la versión de libmysql.dll del directorio de MySQL Server 5.6 y obtuve este error al utilizar MySQL Connector.C 6.1 (ambos instalados por el instalador de MySQL). La lección es usar la correcta, que alguna vez fue construida contra su gema. – Segfault

-1

he tenido el mismo problema, y ​​han resuelto los siguientes:

1 :: Descargar el zip el siguiente enlace: https://dev.mysql.com/downloads/connector/c/

2 :: descomprimir el archivo (libmysql. dll) en la carpeta "Provider" del proyecto.

3 :: Volve uno para ejecutar el comando bundle install

y listo, solucionado!

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

+1

Hola, Yulian, te recomiendo que trates de responder en inglés para llamar más la atención. http://meta.stackexchange.com/questions/13676/do-posts-have-to-be-in-english-on-stack-exchange – jperelli

+0

bien, corregido. pero, lo siento, no hablo ingles! –

Cuestiones relacionadas