Ruby Gem mysql2 Installation schlägt fehl


75

Wenn ich versuche, das mysql2-Juwel zu installieren, schlägt es ohne offensichtliche Fehler fehl. Weiß jemand, was zu tun ist, um dies zu umgehen, damit mysql2 installiert wird?

$ 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

Antworten:


29

Auf Ihrem Computer muss 64-Bit-MySQL installiert sein, sowie die Build-Tools, die Sie bei der Installation von xcode erhalten.


3
Das hat es gelöst. 64-Bit-MySQL über den folgenden Link auf meinem Computer installiert und alles hat einwandfrei funktioniert. Vielen Dank!
Tanner

18
yep - brew install mysqlund dann gem install mysql ohne probleme - danke!
Froderik

146

Ubuntu:

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

Das ist es!

Ergebnis:

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
Leider ist apt unter OSX noch nicht verfügbar. Aber Ihr Ansatz funktioniert tatsächlich unter Debian / Ubuntu.
Holger Nur

6
Ich verstehe nicht, wie viele positive Stimmen dies hat, wenn es nicht der Frage entspricht.
WattsInABox

19
Es hat so viele positive Stimmen, weil andere (wie ich) dies nützlich fanden. Es hat mein Problem gelöst.
John

2
Problem ist das gleiche Problem, aber auf einem anderen Betriebssystem
Abe Petrillo

6
Bitte nicht, dass Sie unter Ubuntu 13 zumindest nichts angeben müssen with-mysql-dir. Einfach installieren libmysqlclient-devund dann ausführen bundle installund es sollte funktionieren.
Josh M.

41

Sie benötigen die MySQL-Entwicklungsheader, damit mysql2 ordnungsgemäß kompiliert werden kann. Dies ist erforderlich, da ein Großteil der Funktionen in C geschrieben und anschließend mit MySQL verknüpft wird.

Eine Lösung besteht darin, das Gem-Installationsprogramm entweder explizit auf Ihren MySQL-Installationsordner zu verweisen

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

oder indem Sie einen MySQL-Server an einem bekannten Ort installieren (z . B. mithilfe von Homebrew ) und dann den Edelstein installieren

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

Bei beiden Ansätzen muss XCode installiert sein, damit der erforderliche GCC-Compiler verfügbar ist.


Die Brühlösung hat bei mir am besten funktioniert. Wenn Sie die Mac OS X MySQL-Binärdatei installieren, stellen Sie sicher, dass Sie die 64-Bit-Version verwenden.
Jason

Danke, die --with-mysql-dir=Option war genau das, was ich brauchte, um mein Problem zu lösen.
Tobias Cohen

Für mich verursachte das --with-mysql-dirtatsächlich ein Problem. Ich habe das einfach weggelassen und es in einem Standardverzeichnis installieren lassen. Ich habe gerade direkt eine bestimmte Version mitgem install mysql2 -v '0.3.18'
user2490003

Danke: Das hat bei mir funktioniert: ==> sudo gem installiere mysql2 - --with-mysql-dir = / usr / local / mysql
Arunabh Das

25

Nachdem Brew und MySQL installiert waren, habe ich Folgendes verwendet, um das mysql2-Juwel zu installieren

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

Wenn Sie Bundler verwenden, können Sie Bundler mit dem folgenden Befehl darüber informieren:

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

Wie hier dokumentiert: http://gembundler.com/man/bundle-config.1.html


1
Dies funktioniert auch, wenn Sie Brew-Versionen verwenden, um alte Versionen zu installieren, z. B. Brew-Installation mysql51, gem install mysql2 -v '0.3.13' - --with-mysql-config = / usr / local / Cellar / mysql51 / 5.1 .71 / bin / mysql_config (auf
Berglöwe

einzige Lösung für dieses seltsame Problem in MacOS!
kevinluo201


6

Ubuntu 15.04:

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

Ubuntu-16.04:

sudo apt-get install ruby-mysql2
sudo gem install mysql2

Ausgabe:

Building native extensions.  This could take a while...
Successfully installed mysql2-0.3.19
Parsing documentation for mysql2-0.3.19
Installing ri documentation for mysql2-0.3.19
Done installing documentation for mysql2 after 0 seconds
1 gem installed


1

Ich habe das Internet und den Stapelüberlauf im Wert von 2 Tagen durchgearbeitet, und erst als ich diesen Link gefunden und dann angefangen habe, dieses Ticket für mysql2 durchzuarbeiten , habe ich das Problem tatsächlich behoben.

Bei meinem Setup (wie im Ticket erläutert) würden die Compiler-Schalter von -Wno-Null-Conversion -Wno-unused-Private-Field unterbrochen und mir einen Fehler geben, der nicht genau korrekt war.

mysql.h is missing. please check your installation of mysql and try again

1

Ich habe dieses Problem gelöst, indem ich genau angegeben habe, wo sich die Verzeichnisse befinden, ohne dass etwas neu installiert werden muss , mit Brew oder Macports oder was auch immer, indem ich nur angegeben habe, wo sich die Dinge befinden (nur eines: Der Ruby auf meinem Mac wurde mit rvm installiert, ich bin nicht die Standardeinstellung verwenden, die mit os x geliefert wird):

Hinzufügen zu Ihren gem install mysql2Flaggen unten

  • --srcdir="..." - das beinhaltet
  • --with-mysql-dir="..." - das MySQL-Verzeichnis
  • --with-mysql-config="..." - die Datei mysql_config

so was gem install mysql2 --srcdir=/usr/local/mysql/include/ --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config


1

In Centos 6.x (7 sollte funktionieren) mit SCL (Software Collection) rh-mysql:

scl enable rh-mysql56 bash
gem install mysql2 -v '0.4.5' -- --with-mysql-include=/opt/rh/rh-mysql56/root/usr/include --with-mysql-lib=/opt/rh/rh-mysql56/root/usr/lib64

0

Ich denke, wenn Sie rvm use ruby-2.1.0@rails4.0 --createin Ihr Verzeichnis eingeben, dann bundle installfunktioniert es.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.