Rails
MySQL
Gemfile

Library not loaded: libmysqlclient.18.dylib (LoadError) などが起きた時


状況

Mac OS で Rails の開発環境を構築しているとして、rails s などで rails server を起動しようとした時に Library not loaded: libmysqlclient.18.dylib (LoadError) が発生して起動しないことがある。

よくある解決方法は、Mysql を再インストールしよう的な内容もあるが、原因と対処についてメモとして残しておく。


なぜ発生するのか?

概ね下記の仮設に該当するだろう

- Homebrew などで Mysql を version up / uninstall / install した

- 複数の rails アプリを local 環境で bundler によって管理しているが、ある bundler 環境で構築した mysq12 の設定と、別な bundler 環境に存在する mysql2 の設定が異なり、各々異なった mysql version のクライアントライブラリを指定している。

- 以前 rails アプリを bundler で構築して、新規に rails アプリをインストールしたがその時に mysql の version を追加したなど


対策


方針

そもそも libmysqlclient.18.dylib なんて存在するかどうかは保証されない。また、わざわざそのために Mysql をバージョンダウンするのも不毛である。mysql2 gem を install する時に複数あるかもしれない mysql のどのバイナリを使用して install するのかを指定するだけである。

from rubydoc ( https://www.rubydoc.info/gems/mysql2/0.5.2#Configuration_options )


--with-mysql-config[=/path/to/mysql_config] - Specify a path to the mysql_config binary provided by your copy of MySQL. The mysql2 gem will ask this mysql_config binary about the compiler and linker arguments needed. This option is mutually exclusive with --with-mysql-dir.



実行

homebrew で install した version が @5.x などにはいるので、適宜読み替えること。

bundle exec gem uninstall mysql2

bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql\@5.x/5.x.xx/bin/mysql_config
bundle exec bundle


参考

https://stackoverflow.com/questions/7139210/install-the-mysql2-gem-for-a-specific-mysql-client-version

https://www.rubydoc.info/gems/mysql2/0.5.2#Configuration_options