How to get the Ruby MySQL Gem to work on OS X Snow Leopard

This one was very strange. I had previously upgraded to Snow Leopard from Leopard, and all of my Ruby gems survived the upgrade just fine. But this afternoon I did I clean reinstall, only to find that I couldn’t install the MySQL gem. Every time I tried I got the following output:

> sudo gem install mysql
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
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/mysql-2.8.1 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.8.1/ext/mysql_api/gem_make.out

Obviously the installer can’t find the lib files needed to build the gem. I tried setting the lib and includes directories (for my mysql install) using the flags above but it didn’t want to accept any of them. After a little investigation online I read that you can make it build by using the mysql config option, like this:

sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

That worked! But then when I started using rake I got the following error:

#<NameError: uninitialized constant MysqlCompat::MysqlRes>

So something was obviously going wrong.

Solution:

Finally I discovered another hint on Google Groups. It turns out that because I have 64bit MySQL installed, I need to make sure that I tell gem to compile the MySQL in 64bit mode, like this:

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

And now at last it works!

Note

The official document on upgrading rails to Snow Leopard can be found here.

Advertisements

About this entry