railsクレデンシャルの修正を行おうと下記コマンドを実行したところ、エラーが表示されました。
$ EDITOR="vim" bundle exec bin/rails credentials:edit
<internal:/Users/aisplay/.rbenv/versions/3.2.3/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require':
dlopen(/Users/aisplay/project/EXMAPLE-REPOSITORY/vendor/bundle/ruby/3.2.0/gems/mysql2-0.5.6/lib/mysql2/mysql2.bundle, 0x0009):
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.23.dylib (LoadError)
Referenced from: <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX> /Users/aisplay/project/EXMAPLE-REPOSITORY/vendor/bundle/ruby/3.2.0/gems/mysql2-0.5.6/lib/mysql2/mysql2.bundle
Reason: tried: '/usr/local/opt/mysql/lib/libmysqlclient.23.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/mysql/lib/libmysqlclient.23.dylib' (no such file), '/usr/local/opt/mysql/lib/libmysqlclient.23.dylib' (no such file), '/usr/local/lib/libmysqlclient.23.dylib' (no such file), '/usr/lib/libmysqlclient.23.dylib' (no such file, not in dyld cache) - /Users/aisplay/project/EXMAPLE-REPOSITORY/vendor/bundle/ruby/3.2.0/gems/mysql2-0.5.6/lib/mysql2/mysql2.bundle
エラーメッセージを見ている感じだと、Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.23.dylib (LoadError)
とあるので、mysqlのlibでlibmysqlclient.23.dylib
の読み込みに失敗しているよう。
試しに確認。
$ cd /usr/local/opt/mysql/lib/
$ ls -a
見た感じlibmysqlclient.23.dylib
はなくて、libmysqlclient.24.dylib
がある。
どうやらlibmysqlclient.23.dylib
が提供されているのはmysql@8.3で、
libmysqlclient.24.dylib
はmysql@9.0だった。
mysqlのバージョンを確認してみる
$ mysql --version
やはり9.0が使われている!
最近PCを新しくしてbrew install mysql
を行ったのですが、最近 安定版が9.0になったようで、その時にうっかりmysql9をインストールしてしまったようです。
そして使用しているgem mysql2
の最新版が0.5.6(更新時点)で、
libmysqlclient 8.3までしかサポートしていないと書いてある。。
https://github.com/brianmario/mysql2/releases/tag/0.5.6
mysqlをダウングレードする
そもそも今のプロジェクトではmysqlのバージョンは8なので、インストールしました。
$ brew install mysql@8.0
brewで提供されている8系は8.4もありましたが、8.4では9.0と同じくlibmysqlclient.24.dylib
が使われていたので、8.0をインストール。
ちなみにbrew search mysql
してインストールできるバージョンを確認してみましたが、8.3がなかったので8.0をインストールしました。
一緒にmysql-client@8.0もインストール。
brew install mysql-client@8.0
開発ディレクトリ内で、参考Issue(後述)通りにコマンドを実施。
$ bundle config --local build.mysql2 -- --with-mysql-dir=$(brew --prefix mysql-client@8.0)
上記設定が反映されたかを確認
$ bundle config
$ bundle install
これでもエラーが解消されなかったので、
一旦vendor配下のbundleディレクトリを削除してから再度bundle install
実行したら、エラーが解消されました!
参考
このIssueの回答がめちゃめちゃ参考になりました🥲🥲