Erreur lors de l'installation de mysql2: échec de la création de l'extension native gem

485

J'ai des problèmes lors de l'installation de mysql2gem pour Rails. Lorsque j'essaie de l'installer en exécutant bundle installou gem install mysql2cela me donne l'erreur suivante:

Erreur lors de l'installation de mysql2: ERREUR: échec de la construction de l'extension native gem.

Comment puis-je résoudre ce problème et réussir l'installation mysql2?

spacemonkey
la source
Dans mon cas ruby ​​2.1 aucune erreur n'a été montrée mais elle a gelé pendant plusieurs minutes. La réponse de Spacemonkey l'a corrigé.
Lucio

Réponses:

916

Sur Ubuntu / Debian et autres distributions utilisant aptitude:

sudo apt-get install libmysql-ruby libmysqlclient-dev

Le package libmysql-rubya été supprimé et remplacé par ruby-mysql. C'est là que j'ai trouvé la solution.

Si la commande ci-dessus ne fonctionne pas car elle libmysql-rubyest introuvable, les éléments suivants devraient être suffisants:

sudo apt-get install libmysqlclient-dev

Sur Red Hat / CentOS et autres distributions utilisant yum:

sudo yum install mysql-devel

Sur Mac OS X avec Homebrew :

brew install mysql
spacemonkey
la source
5
j'ai le même problème sur Windows 7 .. toutes les idées? la commande ci-dessus
n'a
37
Bonjour, j'utilise Ubuntu 12.04 avec Ruby 1.9.3 et Rails 3.2.8 et dans mon cas, l'installation libmysqlclient-devétait suffisante.
SMMousavi
2
Si vous utilisez Mac OSX: mettez à jour vers la dernière version de XCode et installez les outils de développement. J'ai eu le même problème d'installation de mysql (même lors de l'utilisation de --with-mysql-config = / usr / local / mysql / bin / mysql_config)
Americo Savinon
2
Je n'avais pas besoin de libmysql-ruby depuis que j'avais installé Ruby via RVM
Michael Lang
1
Pour Windows, essayez la réponse
cochée
60

Je suis sur un mac et j'utilise homebrew pour installer des programmes open source. J'ai dû installer des outils Mac Dev pour installer homebrew, mais après cela, c'était simple:

brew install mysql

pour installer mysql. Je n'ai pas eu de problème de gemme mysql depuis.

Kelsin
la source
3
Je reçois une erreur même après avoir fait cela. Dois-je passer quelques options quand je fais du gem i mysql2 ??
hnprashanth
Après avoir exécuté cela, je n'ai eu aucun problème à installer la gemme rubis mysql2 sur Mac OSX Lion.
KrisG
3
Si cela n'aide pas, essayez brew link mysql --force.
Chuck Batson
34

voici une solution pour les utilisateurs de windows , j'espère que ça aide!

Utiliser MySQL avec Rails 3 sous Windows

  • Installer railsinstaller -> www.railsinstaller.org (je l'ai installé sur c: \ Rails)

  • Installez MySQL (j'ai utilisé MySQL 5.5) -> dev.mysql.com/downloads/installer/

--- pour l'installation de mySQL ---

Si vous n'avez pas déjà installé ces deux fichiers, vous pourriez en avoir besoin pour que votre MySQL fonctionne

vcredist_x86.exe -> http://www.microsoft.com/download/en/details.aspx? id = 5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/download/en/details.aspx?id=17718

Utiliser l'installation par défaut Developer Machine

-MySQL Server Config-
port: 3306
nom du service Windows: MySQL55
mysql root pass: root (vous pouvez le changer plus tard)
(nom d'utilisateur: root)
-MySQL Server Config-

--- pour l'installation de mySQL ---


--- Installez le mysql2 Gem ---

Important: faites-le avec la ligne de commande Git Bash (cela a été installé avec railsinstaller) -> start / Git Bash

gem installez mysql2 - '--with-mysql-lib = "c: \ Program Files \ MySQL \ MySQL Server 5.5 \ lib "--with-mysql-include =" c: \ Program Files \ MySQL \ MySQL Server 5.5 \ include "'

Maintenant, la gemme doit avoir été installée correctement.

Enfin, copiez le fichier libmysql.dll de
C: \ Program Files \ MySQL \ MySQL Server 5.5 \ lib
dans
C: \ Rails \ Ruby1.9.2 \ bin

--- Installez le mysql2 Gem ---


Vous pourrez désormais utiliser votre application Rails avec MySQL, si vous ne savez pas comment créer une application Rails 3 avec MySQL, lisez la suite ...


--- Obtenez une application Rails 3 avec MySQL ---

Ouvrez l'invite de commande (pas Git Bash) -> start / cmd
Accédez à votre dossier (c: \ Sites)
Créez une nouvelle application rails

rails new world

Supprimez le fichier c: \ Sites \ world \ public \ index.html
Modifiez le fichier c: \ Sites \ world \ config \ routes.rb
ajoutez cette ligne -> root: to => 'cities # index'

Ouvrir l'invite de commande (générer des vues et des contrôleurs)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



Modifiez le fichier c: \ Sites \ world \ app \ models \ city.rb pour qu'il ressemble à ceci

class City < ActiveRecord::Base
 set_table_name "city"
end

Modifiez le fichier c: \ Sites \ world \ config \ database.yml pour qu'il ressemble à ceci

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

ajouter au gemfile

gem 'mysql2'

Ouvrez l' invite de commande windows cmd, pas Git Bash (exécutez votre application!)
Accédez à votre dossier d'application (c: \ Sites \ world)

rails s

Ouvrez votre navigateur ici -> http: // localhost: 3000

--- Obtenez une application Rails 3 avec MySQL ---

François
la source
Merci, le problème était que j'utilisais widnows PowerShell et pas l'invite de commande normale. maintenant ça marche :)
Danpe
l'hôte doit être 127.0.0.1, et si le mot de passe est un nombre, il doit être mis entre guillemets ex '123456' sinon nous pouvons taper normalement ex admin123
duykhoa
3
En utilisant XAMPP:gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql
Mifeng
Regardez le chemin --with-mysql-include: gem install mysql2 - --platform = ruby ​​--with-mysql-lib = "d: \ mariadb \ lib" --with-mysql-include = "d: \ mariadb \ include \ mysql "
Ivan
@Mifeng a très bien fonctionné pour moi, mais j'utilise GitBash et j'avais besoin -- --with-mysql-dir="C:\xampp\mysql"sans les guillemets, mes `` ont été supprimés. Merci
Mutmatt
20

J'ai plusieurs ordinateurs, un processeur 32 et 64 bits, ils fonctionnent sur Ubuntu Linux, version Maverick (10.10).

J'ai eu le même problème, et pour moi, ça a sudo apt-get install libmysql-ruby libmysqlclient-dev fait le boulot !!!

OfficeYA
la source
19

Pour MacOS Mojave :

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

Allen
la source
ainsi que pour MacOS Catalina
Vlad
17

Une autre façon pour les utilisateurs de MacOS

Si vous avez utilisé "brew" pour installer mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

xxx = version de la gemme mysql2 que vous souhaitez installer
yyy = la version de mysql que vous avez installée ls /usr/local/Cellar/mysqlpour la trouver.

aruanoc
la source
J'ai essayé ~ 10 réponses à toutes sortes de questions posées ici ... Vous l'avez résolu. Merci :)
Stan
7

Avez-vous essayé d'utiliser

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

spécifier l'emplacement du répertoire de base ainsi que le chemin d'accès aux bibliothèques MySQL qui sont nécessaires pour terminer l'installation de la gemme?

Sources: MySQL Gem Install ERREUR: échec de la construction de l'extension native de gem Forums MySQL :: Ruby :: Aide nécessaire à l'installation de la liaison MySQL pour Ruby

João Pereira
la source
Fonctionne très bien. J'ai dû utiliser un chemin différent, que j'ai trouvé en appelant which mysqlpuis en trouvant le librépertoire à partir de là.
Joshua Pinter
7

Si vous utilisez yum, essayez:

sudo yum install mysql-devel
Mark Locklear
la source
Cela a fonctionné pour moi dans une micro-instance Amazon EC2, basée sur CentOS.
Lennon
5

Cela a résolu mon problème une fois dans Windows:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D
Carlos Pardilla
la source
J'étais sur le point de publier la source mais je vois que l'utilisateur Ritesh Kumar l'a déjà fait. Donc son mérite, pas le mien.
Carlos Pardilla
Si votre bibliothèque n'a pas de dossier opt:gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir
Junior Mayhé
5

Si vous rencontrez toujours des problèmes….

Essayez d'installer

   sudo apt-get install ruby1.9.1-dev
capu
la source
4

J'ai eu ce problème sur Windows 7. Il s'agit apparemment d'un problème d'incompatibilité et la solution est la suivante:

Téléchargez le libmySQL.dllfichier à partir d'un ancien programme d'installation InstantRails. Il est disponible à partir du référentiel InstantRails GitHub .

Ensuite, copiez ce fichier dans votre dossier Ruby / bin.

Maintenant, vous êtes prêt à partir;)

santo101
la source
1
Hrm. :( J'ai essayé ceci mais j'y ai quand même une erreur en essayant de courir bundle install.
aakoch
3

J'ai aussi cette erreur. Résolu en installant des packages de développement. J'utilise arch et c'était:

sudo pacman -S base-devel

qui a installé:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

mais je pense qu'il fallait en fait make et gcc. Sortie d'erreur dit (sur ma machine, entre autres):

"Vous devez d'abord installer les outils de développement."

C'était donc une décision évidente et cela a aidé.

arty
la source
3

Vous devez installer certaines dépendances

sudo apt-get install libmysql-ruby libmysqlclient-dev
vipin
la source
3

Sur Debian Stretch, le paquet qui fonctionnait pour moi était default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev

Ali Yazdani
la source
3

Dans mon cas, cela a aidé:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

Alors:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

Résultat:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

Voir cet article (ATTENTION: langue japonaise à l'intérieur).

Nobita
la source
3

Sur Ubuntu (18.04)

j'ai pu résoudre ce problème en exécutant ce qui suit:

sudo apt-get install build-essential libmysqlclient-dev
gem install mysql2

référence

Paa Yaw
la source
2

Je rencontrais cette erreur sur mon Mac et j'ai constaté que je devais passer de mysql 32bit à mysql 64 bit pour que cette erreur disparaisse. J'utilisais OSX 10.6 sur un MacBook Pro Intel avec Ruby 1.9.2 et Rails3.0.0

J'ai également dû installer xcode afin d'obtenir des utilitaires Unix comme "make" qui sont nécessaires pour compiler la gemme.

une fois cela fait, j'ai pu exécuter gem install mysql et gem install mysql2 sans erreur.

lofte
la source
1

Pour les utilisateurs de Windows: Vous définissez la lib et incluez le chemin de votre mysql, par exemple, si vous utilisez xampp, vous pouvez avoir comme ceci:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'
Arman Ortega
la source
1

La solution ne fonctionne que sur Mac OS X

Si vous avez installé MySQL avec homebrew, ce qui a fonctionné pour moi a été la désinstallation de MySQL et l'installation de MySQL Community Edition via le site Web MySQL ( https://www.mysql.com/ ).

Après l'installation, il vous suffit de ressaisir la commande gem install mysql2ou, si nécessaire sudo gem install mysql2, si vous rencontrez des problèmes d'autorisation refusée.

the12
la source
0

J'ai obtenu la gemme construite sur Mac OS X 10.6.6 par 1) S'assurer que le package d'outils Developer est installé 2) Télécharger le package MySQL actuel (5.5.8 dans mon cas) à partir de la source 3) Installer l'outil cmake à partir de cmake.org 4 ) En suivant les instructions de la section 2.11 de INSTALL-SOURCE à partir des fichiers de distribution mysql 5) sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include La gemme a été construite avec succès, mais il y a deux erreurs dans la documentation dont rdoc et ri se plaignent. Mais maintenant, quand j'essaie d'exiger «mysql2», j'obtiens un

LoadError: no such file to load -- mysql2/mysql2

J'espérais que l'erreur que j'obtiendrais était que le fichier libmysqlclient.16.dylib était introuvable parce que nous l'avions compris dans un autre article (recherchez install_name_tool).

Mon $ PATH contient / usr / local / mysql (c'est là que se trouvent ma source et les fichiers créés), donc je suis un peu perplexe. Si quelqu'un a des pensées, je reviendrai après quelques heures de sommeil.

tobinjim
la source
0

Après avoir corrigé les problèmes de mysql-dev, vous devrez peut-être supprimer la mauvaise installation de mysql2. Lisez attentivement les messages après l'installation de $ bundle. Vous devrez peut-être

rm -rf vendor/cache/
rm -rf ./Zentest

Cela effacera la mauvaise installation de mysql2 afin qu'une installation finale du bundle $ puisse en créer une bonne.

mmell
la source
0

Vous avez le "Vous devez d'abord installer les outils de développement." erreur lors de la tentative d'installation de la gemme mysql2 après la mise à niveau vers Mac OS X Mountain Lion . Apparemment, cette mise à niveau supprime les compilateurs de ligne de commande.

Pour corriger:

  • J'ai désinstallé ma très ancienne version de Xcode (j'ai exécuté le script de désinstallation dans / Developer / Library). Ensuite, supprimé le répertoire / Developer.
  • Je suis allé sur l'AppStore et j'ai téléchargé Xcode.
  • Lancement de Xcode et accès aux Préférences -> Téléchargements, et installation des outils de ligne de commande.
Sunil D.
la source
0

Vous rencontrez ce problème car vous n'avez pas installé MySql. Avant d'installer mysql2 gem. Installez MySQL. Après cela, mysql2 gem s'installera.

Amrit Dhungana
la source
0

Je voulais juste ajouter cette réponse spécifiquement pour les utilisateurs Mac .

Mon serveur fonctionnait parfaitement bien jusqu'à ce que je mette à jour mon xcode. Au démarrage de mon serveur de rails, l'erreur s'est affichée comme ceci

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

Et il a été suggéré d'installer mysql2 gem à la fin du message d'erreur. Donc, quand j'ai essayé de l'installer, j'ai eu l'erreur comme mentionné ci-dessus dans cette question. L'erreur que j'ai eu est la suivante

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

Donc, comme suggéré dans cet article, j'ai essayé 'brew install mysql' et cela a cessé de dire que la version mysql était déjà installée. Mais il y avait un avertissement avant de dire

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

Alors j'ai essayé ça sudo xcodebuild -license et tapez «d'accord» à la fin. Vous devez être root pour accepter la licence.

Après cela, j'ai de nouveau essayé l'installation du bundle et tout fonctionne bien comme d'habitude. [Même en raison de cette mise à jour de xcode, j'ai également eu un problème avec ma tour.]

Sony Mathew
la source
0

libmysql-ruby a été supprimé et remplacé. Nouvelle commande:

 sudo apt-get install ruby-mysql libmysqlclient-dev
Jérôme
la source