31 votes

problème d'installation de bundle : mysql.h est manquant

Dans mon mac OSX 10.6 32 bit, je peux installer la gemme mysql2 assez facilement, mais pas dans le serveur mini mac 10.6 64bit.

J'ai installé MySQL 5.5.11 sur mon serveur, et MySQL 5.5.0.m2 sur mon ordinateur personnel. D'une manière ou d'une autre, lorsque j'exécute bundle install, le serveur tente d'installer mysql2.0.3.2 alors que mon mac personnel utilise mysql2.0.2.6.

S'il te plaît, ne me dis pas de

env ARCHFLAGS="-arch x86_64" sudo gem install mysql2 --version '= 0.2.6' -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

J'ai essayé, ça ne marche pas.

Inclure /usr/local/mysql/bin dans $PATH n'aide pas non plus.

Code d'erreur :

    Installing mysql2 (0.3.2) with native extensions /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:533:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

        /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb 
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=/Users/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
    --with-mysql-config
    --without-mysql-config

Gem files will remain installed in /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2 for inspection.
Results logged to /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/ext/mysql2/gem_make.out
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:511:in `block in build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `each'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:159:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/source.rb:96:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:55:in `block in run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `block in each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:44:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:8:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/cli.rb:225:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/bin/bundle:13:in `<top (required)>'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `load'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `<main>'

91voto

guido Points 1363

J'ai essayé toutes les solutions proposées ici, mais je n'ai pas eu de chance. J'ai réinstallé mysql avec homebrew plusieurs fois et toujours pas de chance. Puis je suis tombé sur un article de blog avec une solution.

J'ai édité le fichier mysql_config en /usr/local/Cellar/mysql/5.6.12/bin et supprimé les options du compilateur W -Wno-null-conversion y -Wno-unused-private-field pour cflags et cxxflags.

Cela a permis de résoudre le problème avec gem install mysql2 y bundle install

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

1 votes

Confirmé avec OS X 10.8.3, XCode 4.6.3 et MySQL 5.6.12.

1 votes

J'ai eu le même problème et ceci a résolu mon problème. Ces drapeaux ont-ils été introduits par erreur ? J'ai compilé le mysql2 dans le passé sans aucun problème, en utilisant un mysql brassé.

2 votes

Fonctionne parfaitement sur 10.8 / 5.6.12

28voto

db365 Points 247

J'ai fait une installation groupée sur un dépôt redmine et j'ai obtenu le même message d'erreur :

mysql.h est manquant. Veuillez vérifier votre installation de mysql et réessayer.

Sous Fedora 16 64 bits, je n'ai fait qu'installer mysql-devel (paquet de développement) du rpm de la distro et le problème était résolu !

Donc je pense que vous pourriez juste

yum install mysql-devel

ou apt-get le paquet devel manquant.

1 votes

Ce n'est pas lié à OS X.

2 votes

Eh bien, ça m'a aidé... donc je suis reconnaissant qu'il/elle l'ait posté !

0 votes

Merci. Pour information, avec Fedora 19 (mariadb), évidemment, c'est mariadb-devel

8voto

okliv Points 1943

Pour les personnes qui n'ont pas utilisé brew pour installer mysql et utiliser mysql 5.6 et plus :

en fonction de cette réponse

vous devez modifier mysql_config qui a été placé dans mon cas ici : /usr/local/mysql-5.6.12-osx10.7-x86_64/bin

et le changement cflags y cxxflags à :

cflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

après ces manipulations

$ gem install mysql2 -v '0.3.13'

se déroule sans problème

0 votes

Cela a fonctionné pour moi sur OSX 10.9.4 en essayant d'installer mysql2 0.3.11.

0 votes

Parfait. Cela a fonctionné pour moi dans mavericks avec gem install mysql. Merci beaucoup.

4voto

workdreamer Points 1360

Ok les gars, pour moi la solution était :

$ sudo brew install mysql

$ sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

source : http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard

OU :

$sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

Si votre version de mysql est 64Bits

Après cela, j'ai eu beaucoup de problèmes car si je veux créer la base de données :

$: bundle exec rake db:reset

Je recevais cette erreur :

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

La solution est : Dans votre fichier de gemmes, ajoutez : gem "ruby-mysql".

Ok, un jour et demi pour trouver la solution.

Passez une bonne journée !

3 votes

Vous ne devriez pas avoir besoin de sudo brew

0 votes

Ruby-mysql n'utilise pas les fichiers natifs que vous avez construits.

2voto

jaycode Points 972

Cette méthode est pour Rails 3.1.0 (et plus si possible) sur une machine 64 bits. J'ai utilisé Ruby-1.9.2-p180.

Ce blog y a répondu : http://www.tatvartha.com/2010/10/installing-mysql-gem-with-bundler-on-snow-leopard/

En gros, la méthode ci-dessus : $ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

peut fonctionner, mais sans bundler.

Pour le faire avec bundler, il faut d'abord exécuter ceci sur le terminal :

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

Notez "mysql2" et non "mysql" comme indiqué dans ce blog.

Cela ajoute une configuration au fichier ~/.bundle/config

Puis ajoutez ceci à ~/.bash_profile :

export ARCHFLAGS="-arch x86_64"

C'est la même chose que de dire à bundler d'exécuter la commande en haut de ce post.

3 votes

Juste un conseil : puisque j'ai utilisé Homebrew pour installer Mysql, la ligne devrait ressembler à quelque chose comme ceci : bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.5.20/bin/mysql_config

1 votes

Ou vous pouvez le trouver comme suit find / -name mysql_config 2>/dev/null

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