注意
自分は以下の方法でインストールが成功するようになったという記事です
場合によってはDBなどに問題が発生する可能性があります
非常に無責任な記事なので、問題がある場合はコメントで指摘をいただけたらと思います。
本記事を参考に操作を行い問題が発生したとしても自己責任でお願い致します
記事の対象読者
- osxでhomebrewを使っている方
- brewコマンドでmysqlを入れた方
- gem の mysql2 が上手くインストール出来ない方
エラーメッセージ抜粋
Installing mysql2 0.4.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
解決方法
環境の確認
brew でインストールしたmysqlをバージョンアップにより複数存在させていないか以下で確認する
ls /usr/local/Cellar/mysql
複数存在しない場合
今回の記事の対象者ではないので、別の記事を参照してください。
複数バージョン存在していた場合
以下のコマンドでmysqlを最新にアップデートし、複数バージョン存在するmysqlを1つにするのが問題の解決方法です。
以下の点に注意してください
- 現在使っているmysqlのバージョンを上げてしまいます
- 現在使っているDBのデータはアップデート後もおそらく使えますが、使えなくなる可能性もあると思います。
以上の点を踏まえたうえで、問題ない方は以下を叩いてください。
brew upgrade mysql # mysqlを最新版にする
# 最新版にしておかないと警告が出る
# Warning: Skipping mysql: most recent version 5.6.XX not installeda
brew cleanup mysql # 古いのを消す
(怖いもの知らずの方は)mysqlをアップデートせずに強引にrm -rf
をしても良いのかもしれないが、怖いのでbrew cleanup
を使う。
もしくはosxを開発環境として使わず、VMを立てて開発しましょう。
補足
筆者の環境
- OSX 10.10.5
- brew でインストールした mysqlを利用している
- rbenv を利用した ruby 2.2.3
筆者の環境での問題発生
rails new project -d msqyl
以上を叩いた際にエラーが出てmysql2
がインストール出来なかった
問題点
rails new
の際に、bundle install
が実行され、つまりgem install mysql2
がエラーになるという話。
調査
ググるとインストールされているmysqlの設定がおかしい!と言うのが出てくる。
なんとなくしっくりこない。
調査中にbrewでインストルしたmysqlが複数バージョン存在しているのに気づき、それが原因ではないかと疑った。
mysqlが複数バージョン存在している理由
以前、何も考えずにbrew upgrade
を叩いた影響だと推測できる。
brew upgrade
は前のバージョンを残しつつ、いい感じにアップデートしてくれるみたいなので気付かなかった。
(無意識の内にバージョンが上がっていたので、ほんとうに「いい感じ」なのかは保証しかねます。)
なぜmysqlが複数存在するのが問題だったのか?
未調査なので、もし分かる方がいたら編集リクエストをいただけたらと思います。