78 votes

Échec de l'installation de la gemme Ruby mysql2

Lorsque j'essaie d'installer la gemme mysql2, elle échoue sans erreur apparente. Quelqu'un sait-il ce qu'il faut faire pour contourner ce problème et installer mysql2 ?

$ sudo gem install mysql2
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** 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=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    --with-mysql-config
    --without-mysql-config
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-mlib
    --without-mlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-zlib
    --without-zlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-socketlib
    --without-socketlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-nsllib
    --without-nsllib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-mygcclib
    --without-mygcclib
    --with-mysqlclientlib
    --without-mysqlclientlib

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/ext/mysql2/gem_make.out

148voto

tunelko Points 1095

Ubuntu :

sudo apt-get install libmysqlclient-dev  #(mysql development headers)
sudo gem install mysql2 -- --with-mysql-dir=/etc/mysql/

C'est ça !

Résultat :

Building native extensions. This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known

3 votes

Malheureusement, apt n'est pas encore disponible sur OSX. Mais votre approche fonctionne effectivement sur Debian/Ubuntu.

6 votes

Je ne comprends pas comment cela a autant de votes positifs alors que cela ne correspond pas à la question.

19 votes

Il a reçu beaucoup de votes positifs parce que d'autres personnes (comme moi) l'ont trouvé utile. Cela a résolu mon problème.

41voto

Holger Just Points 17345

Vous avez besoin des en-têtes de développement MySQL pour que mysql2 compile correctement. Ceci est nécessaire, car la plupart des fonctionnalités sont écrites en C et ensuite liées à MySQL.

Une solution consiste à faire pointer le programme d'installation des gemmes vers le dossier d'installation de mysql de manière explicite, comme suit

gem install mysql2 -- --with-mysql-dir=/usr/local/mysql
# or where ever you installed your mysql server to

ou en installant un serveur mysql à un emplacement connu (par exemple en utilisant homebrew .) et ensuite installer la gemme

# install the mysql server locally
brew install mysql
# install the gem
gem install mysql2

Les deux approches exigent que vous ayez installé XCode pour disposer du compilateur GCC requis.

0 votes

La solution du brassage a été la plus efficace pour moi. Si vous installez le binaire MySQL pour Mac OS X, assurez-vous d'utiliser la version 64 bits.

0 votes

Merci, le --with-mysql-dir= option était juste ce dont j'avais besoin pour résoudre mon problème.

0 votes

Pour moi, le --with-mysql-dir causait en fait un problème. J'ai juste laissé ça de côté et laissé l'installation se faire dans un répertoire par défaut. Je viens d'installer directement une version spécifique avec gem install mysql2 -v '0.3.18'

29voto

coreyward Points 26109

Vous devez avoir MySQL 64 bits installé sur votre machine, ainsi que les outils de construction que vous obtenez lorsque vous installez xcode.

3 votes

Cela a résolu le problème. J'ai installé MySQL 64 bits sur mon ordinateur via le lien ci-dessous et tout a fonctionné correctement. Merci !

19 votes

Yep - brew install mysql et ensuite gem install mysql sans problèmes - thx !

26voto

dkam Points 1559

Avec Brew et MySQL installés, j'ai utilisé ce qui suit pour installer la gemme mysql2

gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.5.10/bin/mysql_config

Si vous utilisez Bundler, vous pouvez l'en informer par une commande :

bundle config build.mysql2 --with-mysql-config=/usr/local//Cellar/mysql/5.5.10/bin/mysql_config

Comme documenté ici : http://gembundler.com/man/bundle-config.1.html

1 votes

Cela fonctionne également si vous utilisez les versions de brew pour installer les anciennes versions, par exemple brew install mysql51, gem install mysql2 -v '0.3.13' -- --with-mysql-config=/usr/local/Cellar/mysql51/5.1.71/bin/mysql_config (sur mountain lion)

0 votes

Seule solution à ce problème étrange dans MacOS !

8voto

Sushma Satish Points 1021

Sur Mac OSX Moutain Lion, la commande ci-dessous a fonctionné pour moi :

gem install mysql2 -- --srcdir=/usr/local/mysql/include

1 votes

Ubuntu 14.01 également !

0 votes

Sur macOS Mojave également !

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