暇人じゃない

MySQL 5.6.12 + Homebrew で mysql2 gem をインストールすると mysql.h is missing エラー

Homebrew で MySQL 5.6.12 をインストールしている環境で、mysql2 gem をインストールすると以下のようなエラーが発生しました。

Installing mysql2 (0.3.11)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/chocoby/.rbenv/versions/2.0.0-p247/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... 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/chocoby/.rbenv/versions/2.0.0-p247/bin/ruby
        --with-mysql-config
        --without-mysql-config


Gem files will remain installed in /-/ruby/2.0.0/gems/mysql2-0.3.11 for inspection.
Results logged to /-/ruby/2.0.0/gems/mysql2-0.3.11/ext/mysql2/gem_make.out

An error occurred while installing mysql2 (0.3.11), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.11'` succeeds before bundling.

ググってみたところ、以下の情報が引っかかりました。

どうやら mysql_config の問題のようです。 どちらの方法も試してみたので、手順を残しておきます。個人的には cflags/cxxflags を書き換える方で良いかと思います。

Formula の cflags/cxxflags を編集する方法

mysql_config を開きます:

sudo vim /usr/local/Cellar/mysql/5.6.12/bin/mysql_config

119-120 行目をコメントアウトまたは削除し、新しく追記します:

#cflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
#cxxflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
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!

bundle install または gem install mysql2 を叩きます:

bundle install

MySQL 5.6.10 を使用する方法

MySQL 5.6.12 をアンインストールします:

brew unlink mysql
brew uninstall mysql

MySQL 5.6.10 の Formula をチェックアウトします:

cd /usr/local
git checkout 48f7e86 Library/Formula/mysql.rb

※brew versions mysql 叩くことによってバージョン毎のコミットのハッシュを確認することができます。

brew versions mysql
5.6.12   git checkout ba37612 /usr/local/Library/Formula/mysql.rb
5.6.10   git checkout 48f7e86 /usr/local/Library/Formula/mysql.rb
5.5.29   git checkout 336c976 /usr/local/Library/Formula/mysql.rb
5.5.28   git checkout 5825f62 /usr/local/Library/Formula/mysql.rb
...

MySQL 5.6.10 をインストールしていない場合はインストールします:

brew install mysql

以前に MySQL 5.6.10 をインストールしている場合は再リンクします:

brew link mysql

bundle install または gem install mysql2 を叩きます:

bundle install

焦りました。これ、これからどうなるのでしょうかね…