勉強メモ

主にプログラミングの勉強メモ

Rails のbundle install で mysql2 のエラーでハマった

Rails で mysql2 をbundle install しようとして躓いたのでメモ。

インストールしようとした mysql2 のバージョンは 0.4.9。

エラー内容

Installing mysql2 0.4.9 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

...
中略
...

-----
Setting rpath to /usr/local/Cellar/mysql/8.0.12/lib
-----
creating Makefile

current directory:
/Users/macbookpromid2010/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.4.9/ext/mysql2
make "DESTDIR=" clean

current directory:
/Users/macbookpromid2010/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/mysql2-0.4.9/ext/mysql2
make "DESTDIR="
compiling client.c
client.c:886:10: error: use of undeclared identifier 'MYSQL_SECURE_AUTH'; did you mean
'MYSQL_DEFAULT_AUTH'?
    case MYSQL_SECURE_AUTH:
         ^~~~~~~~~~~~~~~~~
         MYSQL_DEFAULT_AUTH
/usr/local/Cellar/mysql/8.0.12/include/mysql/mysql.h:188:3: note: 'MYSQL_DEFAULT_AUTH' declared here
  MYSQL_DEFAULT_AUTH,
  ^
client.c:1315:38: error: use of undeclared identifier 'MYSQL_SECURE_AUTH'; did you mean
'MYSQL_DEFAULT_AUTH'?
  return _mysql_client_options(self, MYSQL_SECURE_AUTH, value);
                                     ^~~~~~~~~~~~~~~~~
                                     MYSQL_DEFAULT_AUTH
/usr/local/Cellar/mysql/8.0.12/include/mysql/mysql.h:188:3: note: 'MYSQL_DEFAULT_AUTH' declared here
  MYSQL_DEFAULT_AUTH,
  ^
2 errors generated.
make: *** [client.o] Error 1

make failed, exit code 2

...
中略
...

An error occurred while installing mysql2 (0.4.9), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.9' --source 'https://rubygems.org/'` succeeds before
bundling.

In Gemfile:
  mysql2

解決方法

mysql2 0.4.9 に対応している mysql のバージョンは 5.x.x だったので、 mysql@5.7 をインストールして bundle install すればよかった。 のだが、brew link しないといけないのがわからずハマった。

brew uninstall mysql
brew install mysql@5.7
brew link mysql@5.7 --force #これが必要

keg-only なパッケージをインストールする場合は、brew install しても、/usr/local/bin 等にシンボリックリンクが作られない。 このため brew link してリンクを作る必要があるらしい。

Homebrew についても勉強する必要を感じた。 こちらの記事が参考になりそうだ。

qiita.com