Erreurs d’installation de mysql2 gem via le Bundler

mysql2 d’installer le gem mysql2 via le 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 Googling recommandaient de passer le paramètre --with-mysql-config pour le réparer. 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 meurt avec l’erreur mysql.h is missing , j’ai vérifié cela, et il est supposé être dans le coin, impossible à trouver par le Bundler.

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

Des pensées?

La réponse était similaire à celle que Wrikken a publiée – voici ce que j’ai fait pour le réparer dans l’intérêt des futurs lecteurs.

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

Faire sudo yum list installed affichera tous les paquets installés sur votre machine (note: yum sur RHEL nécessite que vous ajoutiez un repository Red Hat Network [J’utilise EPEL ], et l’exécutez via sudo ).

J’avais mysql et mysql-server , ce qui expliquait pourquoi MySQL fonctionnait bien pour chaque application préexistante, mais pas mysql-devel , ce qui est nécessaire pour corriger le fait que mysql.h is missing erreurs et d’autres erreurs de compilation similaires.

Bref, après un mysqldump -u root -ppassword --all-databases > full-dump.sql pour des mysqldump -u root -ppassword --all-databases > full-dump.sql de sécurité, il a été corrigé avec un simple

 sudo yum install mysql-devel 

Pour Ubuntu, installez les suivants. libmysqlclient-dev libmysqlclient16

Pour Mac avec une installation 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-Utilisation-privée-champ pour les 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

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

  yum install mysql-devel 

parfois, il y aura des conflits avec les paquets existants qui s’installent si vous installez l’outil MySql-Administrative et le navigateur de requêtes MySQL.

Dans ce cas, vous devez désinstaller tous les paquets 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 

Donc, 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 faites l’installation du paquet mysql-devel.

  yum install mysql-devel 

Maintenant, il n’y a plus de conflits de paquets 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.

Dans mon cas, le problème était un script mysql_config incorrect. Lorsqu’il est appelé par la ligne de commande avec l’option –cflags, il renverrait une chaîne d’options contenant:

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

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

Ce qui a fonctionné pour moi était 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 = native -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF" #note: end space! 

que j’ai réécrite comme:

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

J’ai eu la même erreur. et pour Ubuntu 16. J’ai dû écrire ci-dessous la commande:

 sudo apt-get install libmysqlclient-dev 

et ça marche en arrière.

Je sais que c’est ancien, mais si quelqu’un obtient toujours cette erreur zlib, assurez-vous d’avoir tapé: rvm use

(quelle que soit la version que vous utilisez)

J’aurais pu jurer que j’ai fait ça. Juste poster au cas où quelqu’un tire leurs cheveux et cela aide. Si pas de chance. 🙂

J’ai rencontré ce problème lors de l’installation groupée de Redmine sur Fedora 23. La solution que j’ai trouvée consistait à lancer cette commande – sudo dnf install redhat-rpm-config .

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

Sur mon Ubuntu 16.04.4 LTS exécutant mysql Ver 15.1 Dissortingb 10.0.34-MariaDB, pour debian-linux-gnu (x86_64) utilisant readline 5.2 , les opérations suivantes ont fonctionné:

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

J’ai vu que le message d’erreur de l’installateur actuel suggère de lancer

 apt-get install libmysqlclient-dev 

Cela pourrait aussi bien fonctionner.