2010-09-20 16 views
60

Estoy tratando de instalar la gema mysql2 a través de la Bündler, pero sigue muriendo con el siguiente error:Errores al instalar la gema mysql2 a través de la Bündler

** executing command 
/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/installer.rb:483:in 'rescue in block in build_extensions': 
ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 

/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config 
checking for rb_thread_blocking_region()... yes 
checking for mysql.h... no 
checking for mysql/mysql.h... no 

----- 
mysql.h is missing. please check your installation of mysql and try again. 
----- 

*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

Provided configuration options: 
--with-opt-dir 
--without-opt-dir 
--with-opt-include 
--without-opt-include=${opt-dir}/include 
--with-opt-lib 
--without-opt-lib=${opt-dir}/lib 
--with-make-prog 
--without-make-prog 
--srcdir=. 
--curdir 
--ruby=/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 
--with-mysql-config 
Gem files will remain installed for inspection. 

La mayoría de las cosas que he encontrado a través de googlear recomienda pasar el parámetro --with-mysql-config a arreglalo. Por lo tanto, en base a:

$ which mysql_config 
/usr/bin/mysql_config 

que añade lo siguiente al de configuración del Bündler:

$ bundle config build.mysql2 --with-mysql-config='/usr/bin/mysql_config' 

Sin embargo, sigue sin suerte - el mismo accidente que el anterior.

Dado que se está muriendo con el error mysql.h is missing, lo he comprobado, y supuestamente no lo puedo encontrar en el Bundler.

$ find/-name mysql.h 
/usr/include/mysql5/mysql/mysql.h 

¿Alguna idea?

+2

¿Has probado la solución en http://stackoverflow.com/questions/3608287/installing-mysql2-gem-for-rails-3? – Wrikken

+0

De lo contrario, podría simplemente editar 'ext/mysql2/extconf.rb' e ingresar la ruta correcta a su directorio mysql usted mismo (está cerca de la parte superior). – Wrikken

Respuesta

95

La respuesta fue similar a la que Wrikken publicó: esto es lo que hice para solucionarlo por el bien de los futuros lectores.

(Esto es para RHEL 5.5 - comandos similares pero diferentes se aplican para Ubuntu/Debian/etc.)

Haciendo sudo yum list installed imprimirá todos los paquetes instalados en su máquina (nota: yum en RHEL requiere agregue un repositorio de Red Hat Network [Yo uso EPEL], y ejecútelo a través de sudo).

tuve mysql y mysql-server, lo que explica por qué MySQL funcionó bien para todas las aplicaciones pre-existente, pero sin mysql-devel, que es necesario fijar que mysql.h is missing de error y otros similares errores de generación.

larga historia corta, después de un mysqldump -u root -ppassword --all-databases > full-dump.sql para la seguridad, se fija con un simple

sudo yum install mysql-devel 
+0

¡Funciona muy bien! ¡Muchas gracias! –

+9

En mac, do 'brew install mysql' http: // stackoverflow.com/questions/3608287/installation-mysql2-gem-for-rails-3 –

+0

En mi instalación, 'mysql-devel' estaba instalado, pero'/usr/include/mysql' estaba vacío. 'mysql.h' estaba ubicado en'/usr/include/mysql51' en su lugar. Así que ejecuté 'sudo rmdir/usr/include/mysql; sudo ln -s/usr/include/mysql51/usr/include/mysql' y ¡voila! Mysql2 ahora se construye correctamente. – Zee

33

Para Ubuntu tiene que instalar siguiente. libmysqlclient-dev libmysqlclient16

+0

Perfecto. Trabajó para mi. – Zabba

+0

+1 Gracias, me salvaste el día :-) –

+0

Cuando probé esto en Ubuntu 16.04, no había 'libmysqlclient16', solo' libmysqlclient20'. Sospecho que cualquiera que sea la versión de Ubuntu que use, algo como 'sudo apt-get install 'libmysqlclient *'' instalará los dos paquetes necesarios, siempre que la versión actualizada no rompa nada. – mwfearnley

0

Sé que esto es antiguo, pero si alguien todavía recibe este error zlib, asegúrese de que ha escrito: uso RVM

(sea cual sea la versión que está utilizando)

Podría haber jurado que hice eso. Solo publique en caso de que alguien se quite el pelo y esto ayuda. Si no es buena suerte. :)

8

El problema anterior se producirá porque el paquete mysql-devel no está instalado correctamente en su sistema. Se me explicará lo mismo en Centos sobre cómo solucionarlo. Cuando intenta instalar dicho paquete mediante,

yum install mysql-devel 

somtimes habrá algún choque ocurre con los paquetes existentes que se instala si se instala la herramienta MySQL-Administrativo y el navegador consulta MySQL.

En ese caso, debe desinstalar todos los paquetes mysql2 existentes e instalarlos de nuevo.

rpm -qa -last | grep -i mysql 
    yum remove MySQL-server-5.5.27-1.rhel5 
    yum remove MySQL-client-5.5.27-1.rhel5 
    yum remove mysql-gui-tools-5.0r12-1rhel4 
    yum remove mysql-query-browser-5.0r12-1rhel4-a 

Por lo tanto, puede desinstalar todo lo que se muestra en mysql con rpm -qa como en el ejemplo anterior.

Luego puede instalar mysql-server y mysql-client.

yum install mysql-server 
    yum install mysql-client 

Ahora usted hace la instalación del paquete mysql-devel.

yum install mysql-devel 

Ahora no hay conflictos de paquetes y puede instalar la gema mysql2.

gem install mysql2 -v '0.3.11' 

Ahora su gema mysql2 se habrá instalado con éxito y estará listo.

1

En mi caso, el problema era una secuencia de comandos mysql_config que funcionaba mal. Cuando se invoca mediante la línea de comandos con la opción --cflags volvería una serie de opciones que contienen:

-Xclang -target-feature -Xclang -aes -Qunused-arguments

Por alguna razón la llamada a have_header ('mysql.h') en el guión extconf.rb fallaría si esas opciones fueron incluidas.

lo que funcionó para mí fue a entregar editar el archivo mysql_config la eliminación de la referencia a las opciones de la línea:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF " #note: end space!

cuales Reescribí como:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -O2 -g -DDBUG_OFF " #note: end space!
20

para Mac con una cerveza instalación de mysql la siguiente solución me solucionó el problema:

Edité el archivo mysql_config en /usr/local/Cellar/mysql/5.6.12/bin y eliminé las opciones del compilador W -Wno-nul l-conversion y -Wno-unused-private-field para cflags y cxxflags.

Esto resolvió el problema con "gem install mysql2".

Referencia: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

+1

funciona para mí. ¡Gracias! – taiansu

+0

¡Yo también! Gracias, salvó mi día! –

0

me encontré con este problema, mientras que la instalación de paquete para Redmine en Fedora 23. La solución que encontré fue emitir este comando - sudo dnf install redhat-rpm-config.

Esto no solo solucionó mi problema al instalar mysql2, sino también para nokogiri y redcarpet.

1

Tengo el mismo error. y para ubuntu 16. Tuve que escribir debajo del comando:

sudo apt-get install libmysqlclient-dev 

y funciona de nuevo.

Cuestiones relacionadas