Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

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

概要

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

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

参考記事一覧

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?