Ruby gem mysql2 install failing [duplicate]
Asked Answered
F

11

82

When I try to install the mysql2 gem, it fails with no apparent errors. Does anyone know what to do to work around this so mysql2 installs?

$ 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
Fatherinlaw answered 6/11, 2010 at 20:57 Comment(0)
D
30

You have to have 64-bit MySQL installed on your machine, plus the build tools you get when you install xcode.

Ducal answered 6/11, 2010 at 21:3 Comment(2)
That solved it. Installed 64-bit MySQL on my computer via the link below and all worked fine. Thanks!Fatherinlaw
yep - brew install mysql and then gem install mysql without problems - thx!Sarina
M
157

Ubuntu:

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

That's it!

Result:

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
Misspell answered 22/12, 2010 at 15:44 Comment(10)
Unfortunately, apt is not yet available on OSX. But your approach does indeed work on Debian/Ubuntu.Rebekah
I don't understand how this has so many upvotes when it does not correspond to the question.Chanda
It has so many upvotes because others (like myself) have found this useful. It solved my issue.Weinert
Issue is the same problem but on a different OSHorsehair
Install another useful gem - sudo gem install mysql2xxxx -- --with-mysql-dir=/etc/mysql/Entryway
For me the --with-mysql-dir was not enough, and instead I had to use sudo gem install mysql2 -- --with-mysql-include=/usr/include/mysql/ --with-mysql-lib=/usr/lib/mysql/Sortilege
this helped me install mysql2 on my chromebook. thanks @tunelko!Oller
Please not that on Ubuntu 13, at least, you don't have to specify with-mysql-dir. Just install libmysqlclient-dev and then run bundle install and it should work.Spadefish
@JoshM.: Fantastic tip. Thanks a lot. Works much smoother that way, including on Debian Wheezy.Yeast
libmysqlclient-dev solved my problem in Ubuntu 14.04. Thanks!Allemande
R
42

You need the MySQL development headers for mysql2 to properly compile. This is needed, because much of the functionality is written in C and subsequently linked against MySQL.

A solution is to either point the gem installer to your mysql install folder explicitly like so

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

or by installing a mysql server to a known location (e.g. by using homebrew.) and then installing the gem

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

Both approaches require you to have XCode installed to have the required GCC compiler.

Rebekah answered 6/11, 2010 at 21:10 Comment(4)
The brew solution worked the best for me. If you install the Mac OS X MySQL binary make sure to use the 64bit version.Ladonna
Thanks, the --with-mysql-dir= option was just what I needed to solve my problem.Ineptitude
For me the --with-mysql-dir was actually causing an issue. I just left that off and let it install to a default directory. I just direct installed a specific version with gem install mysql2 -v '0.3.18'Heyday
Thanks : This worked for me : ==> sudo gem install mysql2 -- --with-mysql-dir=/usr/local/mysqlSubstantial
D
30

You have to have 64-bit MySQL installed on your machine, plus the build tools you get when you install xcode.

Ducal answered 6/11, 2010 at 21:3 Comment(2)
That solved it. Installed 64-bit MySQL on my computer via the link below and all worked fine. Thanks!Fatherinlaw
yep - brew install mysql and then gem install mysql without problems - thx!Sarina
B
27

With Brew and MySQL installed, I used the following to install the mysql2 gem

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

If you're using Bundler, you can tell bundler about this with command:

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

As documented here: http://gembundler.com/man/bundle-config.1.html

Bastille answered 19/2, 2012 at 12:16 Comment(2)
This also works if you're using brew versions to install old versions, e.g. brew install mysql51, gem install mysql2 -v '0.3.13' -- --with-mysql-config=/usr/local/Cellar/mysql51/5.1.71/bin/mysql_config (on mountain lion)Onepiece
only solution to this strange problem in MacOS!Spiegel
H
9

on Mac OSX Moutain Lion, below command worked for me:

gem install mysql2 -- --srcdir=/usr/local/mysql/include
Houseyhousey answered 10/12, 2012 at 10:32 Comment(2)
Ubuntu 14.01 as well!Iconology
On macOS Mojave as well!Impetigo
V
7

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

Output:

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
Valorous answered 23/8, 2015 at 10:53 Comment(0)
V
3

You might want to check this thread at the MySQL web site: http://forums.mysql.com/read.php?116,178217,178217, particularly the answer by Scott Derrick: http://forums.mysql.com/read.php?116,178217,189357#msg-189357

To be more specific, try using

sudo gem install mysql2 -- --with-mysql-dir=/usr/local/mysql

Hope that helps.

Venusberg answered 6/11, 2010 at 21:4 Comment(0)
D
2

In Centos 6.x (7 should work) with 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
Disforest answered 26/11, 2016 at 4:24 Comment(0)
A
1

I dug through 2 days worth of the internet and Stack Overflow, and it wasn't until I found this link and then starting working through this ticket for mysql2 that I actually resolved the issue.

With my setup (as explained in the ticket), the compiler switches of -Wno-null-conversion -Wno-unused-private-field would break and give me an error that wasn't exactly correct, which was:

mysql.h is missing. please check your installation of mysql and try again
Aeromancy answered 25/6, 2013 at 17:4 Comment(0)
P
1

I solved this by being specific on where are the directories, no need to reinstall anything, with brew or macports or whatever, just by specifying where are the things (only one thing: the ruby on my mac was installed with rvm, I'm not using the default one that comes with os x):

adding to your gem install mysql2 the flags below

  • --srcdir="..." - the includes
  • --with-mysql-dir="..." - the mysql directory
  • --with-mysql-config="..." - the mysql_config file

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

Pudens answered 21/10, 2016 at 17:0 Comment(0)
D
0

I guess that if you type rvm use [email protected] --create in you directory then bundle install it works.

Dalia answered 30/1, 2014 at 16:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.