この記事では RailsでGemを入れる時にmysql2
がやっかいで入らないのを解決する記事です。
同様の記事はかなりたくさんあるのですが、2020/04/28現在、全部やってもうまくいかなくてGithubのissueとStackOverFlowでなんとかいったのでその紹介です。
mysql5.7や8.0使いたいのに5.6に戻す系は自分的には目的に沿ってないのであくまでもポジティブに攻めてます。(いつも)
エラー
ld: library not found for -lssl
特に解決につながった参考記事
- https://github.com/brianmario/mysql2/issues/795
- https://stackoverflow.com/questions/57047085/ld-library-not-found-for-lssl-while-installing-mysql2-gem
やったこと 1 xcode-select --install
そもそも、人によってうまくいくパターンが異なるのは、それぞれの環境での「どこまでやったか」が異なることが大きいと思います。
なので、やったことを書いていきます。
xcode-select --install
そもそもやってないとだめなのかどうか微妙。
これで解決した人もいるらしい。
やったこと2 openssl
をインストールしてパス通す
brew install openssl
または
brew install openssl@1.1
ののち、インストールの最後のログに出るパスを通す。
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
または
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
私は@1.1で両方やりました。
また、これを プロジェクトルート/.bundle/config に追加するやり方もありますね。
以前はうまくいってましたが、最新PCではこれではうまくいかなくなってました。
やったこと3 LIBRARY_PATH
opensslのインストールののち、
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
やったこと4 (2)の内容をoptionでつけてgem install
gem install mysql2 -- --with-cflags=\"-I/usr/local/opt/openssl/include\" --with-ldflags=\"-L/usr/local/opt/openssl/lib\"
これだけだとうまくいかないけど、(3) LIBRARY_PATH
と両方やるとうまくいった感がありました。
(3), (4)をやれば(1)がいらないのかどうかはもはや不明ですが、ここまででなんとかなりそうだと思ってます。
以上となります。