web-dev-qa-db-fra.com

Erreurs lors de l'installation de mysql2 gem via Bundler

J'essaie d'installer la gemme mysql2 via Bundler, mais il continue 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ées via Google ont recommandé de passer le paramètre --with-mysql-config pour le corriger. Donc, basé sur:

$ which mysql_config
/usr/bin/mysql_config

J'ai ajouté ce qui suit à la configuration de Bundler:

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

Cependant, toujours pas de chance - même crash que ci-dessus.

Puisqu'il est en train de mourir avec l'erreur mysql.h is missing, j'ai vérifié, et il semblerait que cela ne soit pas possible, mais le Bundler ne le trouve pas.

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

Des pensées?

60
T.J. Schuck

La réponse était similaire à celle que Wrikken a postée - voici ce que j'ai fait pour résoudre ce problème dans l'intérêt des futurs lecteurs.

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

Faire Sudo yum list installed imprimera tous les paquetages installés sur votre machine (note: yum sur RHEL nécessite que vous ajoutiez un référentiel Red Hat Network [J'utilise EPEL ] et que vous l'exécutiez via Sudo).

J'avais mysql et mysql-server, ce qui expliquait pourquoi MySQL fonctionnait correctement pour toutes les applications préexistantes, mais pas mysql-devel, ce qui est nécessaire pour corriger cette erreur mysql.h is missing et les autres erreurs de construction similaires.

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

Sudo yum install mysql-devel
95
T.J. Schuck

Pour Ubuntu, l’installation suivante est nécessaire . Libmysqlclient-dev

33
Indika K

Pour Mac avec une installation brassée de mysql, la solution suivante a résolu le problème pour moi:

J'ai édité le fichier mysql_config dans /usr/local/Cellar/mysql/5.6.12/bin et supprimé les options du compilateur W -Wno-null-conversion et -Wno-in-private-field pour 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

20
guido

Le problème ci-dessus va se produire car le paquet mysql-devel n'est pas installé correctement sur votre système. Je serai expliquer la même chose dans Centos de la façon de le réparer. Lorsque vous essayez d'installer ce paquet en utilisant,

    yum install mysql-devel

parfois, des conflits se produisent avec les packages existants qui sont installés si vous installez l'outil MySql-Administrative et le navigateur de requêtes MySQL.

Dans ce cas, vous devez désinstaller tous les packages mysql2 existants et les réinstaller.

    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 tout ce que mysql affiche avec rpm -qa comme ci-dessus.

Ensuite, vous pouvez installer le serveur mysql et le client mysql.

    yum install mysql-server
    yum install mysql-client

Maintenant, vous installez le paquet mysql-devel.

    yum install mysql-devel

Maintenant, il n'y a pas de conflits de paquetages et vous pouvez installer le gem mysql2.

    gem install mysql2 -v '0.3.11'

Maintenant, votre gem mysql2 sera installé avec succès et vous êtes prêt à partir.

8
maniempire

Dans mon cas, le problème était un script mysql_config qui se comportait mal. Lorsqu'il est appelé par la ligne de commande avec l'option --cflags, il renvoie une chaîne d'options contenant:

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

Pour une raison quelconque, l'appel de have_header ('mysql.h') dans le script extconf.rb échouerait si ces options étaient incluses.

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

cflags = "- I $ pkgincludedir -Os -w -pipe -march = natif -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF" # note: espace de fin!

que j'ai réécrit comme:

cflags = "- I $ pkgincludedir -Os -w -pipe -march = natif -O2 -g -DDBUG_OFF" # note: espace de fin!
1
user2449437

J'ai eu la même erreur. et pour Ubuntu 16. Je devais écrire au-dessous de la commande:

Sudo apt-get install libmysqlclient-dev 

et ça marche.

1
Manish Shrivastava

Je sais que cela est ancien, mais si quelqu'un a toujours cette erreur zlib, assurez-vous que vous avez tapé: Rvm use 

(quelle que soit la version que vous utilisez)

J'aurais juré l'avoir fait. Publier au cas où quelqu'un essaierait de se tirer les cheveux et cela aiderait. Sinon bonne chance. :)

0
Kevin

J'ai rencontré ce problème lors de l'installation du paquet pour Redmine sur Fedora 23. La solution que j'ai trouvée consistait à exécuter cette commande - Sudo dnf install redhat-rpm-config.

Non seulement cela a résolu mon problème avec l'installation de mysql2, mais également pour nokogiri et redcarpet.

0
zillaofthegods

Sur mon Ubuntu 16.04.4 LTS running mysql Ver 15.1 Distrib 10.0.34-MariaDB, pour debian-linux-gnu (x86_64) en utilisant readline 5.2 , les éléments suivants ont fonctionné:

Sudo apt-get install libmariadb-client-lgpl-dev

J'ai vu que le message d'erreur du programme d'installation actuel suggère de lancer

apt-get install libmysqlclient-dev

Cela pourrait fonctionner aussi bien.

0
Matthias Luh