Rails 5.2.3 で mysql2 が bundle install できない

# mysql2がbundle installできない

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

current directory:
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2/ext/mysql2
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/bin/ruby -I /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0 -r
./siteconf20190911-34230-1pqv7kn.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... no
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/8.0.17_1/lib
-----
creating Makefile

current directory: /Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
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
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2 for inspection.
Results logged to
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/extensions/x86_64-darwin-18/2.6.0-static/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' --source 'https://rubygems.org/'` succeeds before bundling.
```
いつもの無駄に長いエラーが出ました。

```
ld: library not found for -lssl
```

なんて書いてあります。

## 解決策

```
$ brew info openssl
openssl: stable 1.0.2s (bottled) [keg-only]
SSL/TLS cryptography library
https://openssl.org/
/usr/local/Cellar/openssl/1.0.2s (1,795 files, 12.0MB)
  Poured from bottle on 2019-07-24 at 18:03:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/openssl.rb
==> Caveats
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

openssl is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.

If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

For pkg-config to find openssl you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"

==> Analytics
install: 404,377 (30 days), 1,646,550 (90 days), 6,456,690 (365 days)
install_on_request: 49,803 (30 days), 222,487 (90 days), 862,858 (365 days)
build_error: 0 (30 days)
```

opensslのコンパイルする情報を手に入れられます。下記がそれです。

```
For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"
```

最初、これを一緒にしたコマンドを打ってみました。

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

すると、

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

current directory:
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2/ext/mysql2
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/bin/ruby -I /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0 -r
./siteconf20190911-38087-14y1iqw.rb extconf.rb --with-ldflags\=-L/usr/local/opt/openssl/lib\
--with-cppflags\=-I/usr/local/opt/openssl/include
checking for rb_absint_size()... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/naoya.ohsaki/.rbenv/versions/2.6.2/bin/$(RUBY_BASE_NAME)
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:467:in `try_do': The compiler failed to generate an
executable file. (RuntimeError)
You have to install development tools first.
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:552:in `try_link0'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:570:in `try_link'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:782:in `try_func'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:1069:in `block in have_func'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:959:in `block in checking_for'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:361:in `block (2 levels) in postpone'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:331:in `open'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:361:in `block in postpone'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:331:in `open'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:357:in `postpone'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:958:in `checking_for'
	from /Users/naoya.ohsaki/.rbenv/versions/2.6.2/lib/ruby/2.6.0/mkmf.rb:1068:in `have_func'
	from extconf.rb:25:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/extensions/x86_64-darwin-18/2.6.0-static/mysql2-0.5.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/gems/mysql2-0.5.2 for inspection.
Results logged to
/Users/naoya.ohsaki/.rbenv/versions/2.6.2/gemsets/finacial_analysis/extensions/x86_64-darwin-18/2.6.0-static/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' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
```

若干エラーが変わりました。いつものオプションを示してくるエラーです。オプション下の文章に注目してみると、compileにまた失敗しているようです。

```
To see why this extension failed to compile,
```

どちらか片っぽうだけを指定すればいいようです。

```
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
.
.
.
Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Fetching ngram 1.0.0
Installing ngram 1.0.0
.
.
.
```

うまくいきました。
LDFLAGSとCPPFLAGSの違いとかはまた時間があった時に調べます。

## 上記の方法でもインストールが始まらない場合、

```
$ gem install mysql2 -v '0.4.5' --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib
```

こちらでできます。