LoginSignup
0
0

More than 1 year has passed since last update.

Railsのセットアップの時、mysql2というgemのせいでbundle installができない時に見る記事

Last updated at Posted at 2021-11-25

概要

Rails + MySQLで開発環境を構築する際に発生しうるそこそこややこしいエラーについて、自分なりにまとめてみました。
※Railsの中で、mysql2というgemを使用してます。

発生したエラーについて

Railsのプロジェクトをrails newコマンドで作成後、bundle installした際に下記のエラーが発生することがある。

...省略

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

...省略

linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /var/folders/mj/93db0vd975799gg9w3nnr3_r0000gn/T/bundler20190503-14531-xlyd6cmysql2-0.5.2/gems/mysql2-0.5.2 for inspection.
Results logged to /var/folders/mj/93db0vd975799gg9w3nnr3_r0000gn/T/bundler20190503-14531-xlyd6cmysql2-0.5.2/extensions/universal-darwin-18/2.3.0/mysql2-0.5.2/gem_make.out


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

In Gemfile:
  mysql2

このエラーメッセージで着目したいのは、この一行である。

ld: library not found for -lssl

これはどうやらopensslというライブラリに起因するエラーのようです。
(※厳密にはlibsslだそうです、、、)

このlibsslは、どうやらGCC(GNU Compiler Collectionの略称)のopensslへのリンクオプションらしいです。(参照元)

いろんな記事にて、

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

このコマンドを実行すると解決する!!!みたいなことがよく書かれていると思いますが、これは上記のopensslのライブラリの場所を--with-ldflagsというオプションに渡してあげるとopensslというライブラリ自体を参照するようにしてくれるみたいです。

ですが残念ながら、これでもまだ解決できないケースがあります。

引用元

MacのHigh Sierraから、デフォルトのOpenSSLがOpenSSLからLibreSSLになっているそうで、OpenSSLの諸々の問題を鑑みれば英断らしいのですが、そうはいっても開発環境の様々なツールがOpenSSLに依存しておりアレコレと新たな問題を引き起こすため、様々なツールのほうがLibreSSLに対応するまでさくっとOpenSSLに出戻る方法が下記です。

要するに、どうやらHigh Sierra以降はデフォルトがopensslになっていないそうです。
故に、冒頭にあったopensslというライブラリへの参照が見つからないみたいなエラーが発生してしまいます。

実際にOpenSSLのバージョンを覗いてみると、、、

$ openssl version
LibreSSL 3.0.0 7

このようにLibreSSLになってしまっているそうですね、、、、、

この問題の解決方法として、opensslでデフォルトのLibreSSLからOpenSSLに変更する必要があります。
このやり方に関してはシンプルにパスを通すだけで良いそうです。

$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zsh_profile

ターミナルを再起動すると下記のように、OpenSSLに変更することができました。

$ openssl version
OpenSSL 3.0.0 7 sep 2021

ここまでできたらbundle installコマンドが正常に動作すると重います!!!

まとめ

MySQLのセッティング周りはわりかしややこしいところが多くて、脳死しながらエラー解決しがちになってしまいますが、そこは堪えてエラーメッセージを一つづつ丁寧に読んでみましょう。

なんだかんだ、それがエラー解決の近道だったりしますよね (自戒の意味も込めて)。

参考記事一覧

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0