Homebrew環境にてmysql2のgemをインストールするときのエラー回避策

Mountain LionにてHomebrew環境でMySQLを利用していて,mysql2のgemをBundlerなりgemでインストールを試みようとするときに,次のようなエラーが出るときがあります.(というか現にありました...)

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem 
native extension.
 :
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 ***
 :

「mysql.h」が無いって?

そんなことはないはず.../usr/local/Cellar/mysql/5.5.20/include/にあるのに.

インクルードパスや,ライブラリパスの問題でしょう.そこで,bundlerのbuildオプションとして,”–with-mysql-config=/usr/local/Cellar/mysql/5.6.12/bin/mysql_config” を指定する.

だけどうまくいかず...

そこで,色々ググってみて調べてみた.

ここに明快な回答が書いてありました(^0^)ありがとー Thank you very much!

Random Acts of Sentience: gem install mysql2 missing mysql.h on OS X

まず,mysql_configの結果を確認してみます.

$ mysql_config
Usage: /usr/local/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/local/Cellar/mysql/5.6.12/include  -Wno-null-conversion
 -Os -g -fno-strict-aliasing]
        --cxxflags       [-I/usr/local/Cellar/mysql/5.6.12/include  -Wno-null-conversion
 -Os -g -fno-strict-aliasing]
        --include        [-I/usr/local/Cellar/mysql/5.6.12/include]
        --libs           [-L/usr/local/Cellar/mysql/5.6.12/lib -lmysqlclient]
        --libs_r         [-L/usr/local/Cellar/mysql/5.6.12/lib -lmysqlclient_r]
        --plugindir      [/usr/local/Cellar/mysql/5.6.12/lib/plugin]
        --socket         [/tmp/mysql.sock]
        --port           [0]
        --version        [5.6.12]
        --libmysqld-libs [-L/usr/local/Cellar/mysql/5.6.12/lib -lmysqld]
        --variable=VAR   VAR is one of:
                pkgincludedir [/usr/local/Cellar/mysql/5.6.12/include]
                pkglibdir     [/usr/local/Cellar/mysql/5.6.12/lib]
                plugindir     [/usr/local/Cellar/mysql/5.6.12/lib/plugin]

ここの,「–cflags」と「–cxxflags」に注目!
その中の「-W」で始まる「-Wno-null-conversion」のオプションが曲者だったわけです.

そこで,/usr/local/Cellar/mysql/5.6.12/bin/mysql_config を直接書き換えます.

$ cd /usr/local/Cellar/mysql/5.6.12/bin/
$ cp -p mysql_config mysql_config.ORG
$ vi mysql_config

真ん中へんの

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

$ bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.6.12/bin/mysql_config
$ bundle install

はいっ,今度は無事にできました(^o^)/

Xcodeのコンパイラは,GCCであって,GCCでは無いのか...結構厄介.

広告

One thought on “Homebrew環境にてmysql2のgemをインストールするときのエラー回避策

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中