61 votes

Erreurs lors de l'installation de mysql2 gem via Bundler

Je suis en train d'installer l' mysql2 gem via le système de regroupement, mais il ne cesse de mourir avec l'erreur suivante:

** 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 plupart des choses que j'ai trouvé via Google recommandé de passer l' --with-mysql-config paramètre à fixer. Donc, basé sur:

$ which mysql_config
/usr/bin/mysql_config

J'ai ajouté les lignes suivantes à la Fagoteuse de la config:

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

Cependant, toujours pas de chance -- même un accident en tant que ci-dessus.

Depuis qu'il est en train de mourir avec l'erreur mysql.h is missing,, j'ai vérifié, et c'est prétendument autour de, ne peut tout simplement pas être trouvé par le Bundler.

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

Toutes les pensées?

95voto

T.J. Schuck Points 2684

La réponse est similaire à celui du Wrikken posté -- voici ce que j'ai fait pour le fixer pour le plaisir des futurs lecteurs.

(C'est pour RHEL 5.5 -- similaires mais différentes commandes s'appliquent pour Ubuntu/Debian/etc.)

Faire sudo yum list installed permet d'imprimer tous les paquets installés sur votre machine (note: yum sur RHEL exige d'ajouter un référentiel Red Hat Network [j'utilise EPEL], et de l'exécuter via sudo).

J'ai eu mysql et mysql-server, ce qui explique pourquoi de MySQL a bien fonctionné pour chaque pré-existantes d'application, mais pas d' mysql-devel, ce qui est nécessaire pour corriger cela mysql.h is missing d'erreur et autres erreurs de build.

Longue histoire courte, après un mysqldump -u root -ppassword --all-databases > full-dump.sql pour la sécurité, il a été fixé avec un simple

sudo yum install mysql-devel

33voto

Indika Points 696

Pour Ubuntu devez installer ce qui suit. libmysqlclient-dev libmysqlclient16

20voto

guido Points 1363

Pour Mac avec un brew install de mysql, la solution suivante a résolu le problème pour moi:

J'ai édité le mysql_config fichier dans /usr/local/Cave/mysql 5.6.12/bin et enlevé le W-options du compilateur -Wno-null-conversion et -Wno-inutilisé-privé-terrain pour les variables cflags et cxxflags.

Cela a résolu le problème avec "gem install mysql2".

Référence: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

9voto

maniempire Points 111

Le problème ci-dessus seront dus au fait que la base de données mysql-devel paquet n'est pas correctement installé dans votre système. Je vais être expliquer la même dans Centos de comment résoudre le problème. Lorsque vous essayez d'installer ce paquet à l'aide,

    yum install mysql-devel

parfois, il y aura quelques clash se produit avec les packages existants, installé si vous installez MySql-Administration de l'outil et MySQL query browser.

Dans ce cas, vous devez désinstaller tous les mysql2 paquets et installer à nouveau.

    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

Ainsi, vous pouvez désinstaller quoi que mysql choses affichée avec rpm-qa comme ci-dessus.

Ensuite, vous pouvez installer mysql-server et mysql-client.

    yum install mysql-server
    yum install mysql-client

Maintenant, vous procédez à l'installation de mysql-devel paquet.

    yum install mysql-devel

Maintenant, il n'y a pas de forfait affrontements et vous pouvez en mesure d'installer le mysql2 gem.

    gem install mysql2 -v '0.3.11'

Maintenant, votre mysql2 gem sera installé avec succès et vous êtes bon pour aller.

1voto

user2449437 Points 31

Dans mon cas, le problème était dû à un comportement anormal de mysql_config script. Quand il est invoqué par la ligne de commande avec l'option --cflags option, il serait de retour d'une chaîne d'options contenant:

-Xclang -cible fonction -Xclang -aes -Qunused-arguments

Pour une raison que l'appel à have_header('mysql.h') dans le extconf.rb script serait un échec si ceux de l'option ont été inclus.

Ce qui a fonctionné pour moi a été de modifier à la main le mysql_config fichier en supprimant la référence à ces options à partir de la ligne:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -Xclang -cible fonction -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF " #note: la fin de l'espace!

qui j'ai réécrit comme:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -O2 -g -DDBUG_OFF " #note: la fin de l'espace!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X