俺の、って書いておかないとマサカリ飛んできそうなので。
追記
純粋に mysql2 0.5.4 を再コンパイル (インストール) したらライブラリのリンク切れ解消できていけそうな気もするんだけど、ちょうどよかったというのもあってアップデートを選んでいる。なんらかの理由でパッチバージョン動かせないという場合は、同じバージョンで再コンパイル (インストール) してみてください。
rails s
事情により Ruby 2.7 (Rails 5.1 + MySQL 8.0) でメンテナンスしている環境を起動しようとしたら、起動できなかった。
18:25:19 web.1 | /Users/donbulinux/Workspace/example-project/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2.rb:36:in `require': dlopen(/Users/donbulinux/Workspace/example-project/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle, 0x0009): Library not loaded: /opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib (LoadError) 18:25:19 web.1 | Referenced from: <D6836B55-BF1B-3C55-A1B3-8B6E915A500E> /Users/donbulinux/Workspace/example-project/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle 18:25:19 web.1 | Reason: tried: '/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/usr/local/lib/libmysqlclient.21.dylib' (no such file), '/usr/lib/libmysqlclient.21.dylib' (no such file, not in dyld cache), '/opt/homebrew/Cellar/mysql/8.1.0/lib/libmysqlclient.21.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/mysql/8.1.0/lib/libmysqlclient.21.dylib' (no such file), '/opt/homebrew/Cellar/mysql/8.1.0/lib/libmysqlclient.21.dylib' (no such file), '/usr/local/lib/libmysqlclient.21.dylib' (no such file), '/usr/lib/libmysqlclient.21.dylib' (no such file, not in dyld cache) - /Users/donbulinux/Workspace/example-project/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle
数週間前にメンテナンスついでに main の先頭まで rebase 実施したので「壊れたかな?」と思っていたんですが、そもそも rebase 実施時に動作確認したよな……となり悩んでいた。
「もしかして MySQL のプロセス起動しているけどこれが壊れているとか?」と思いたち、サーバにログインしてみた。
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.1.0 Homebrew mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 8.1.0 | +-----------+ 1 row in set (0.00 sec)
ンアーッ!! バージョンが 8.0.34 -> 8.1.0 へ上がってるナンデ!?
ナンデ!?
と思ったけど、そういえば先日 librsvg
のインストールやった時に Formula のアップデート走りまくったな、と気づいたのでそれです。 本当にありがとうございました。
❯ brew info mysql ==> mysql: stable 8.1.0 (bottled) Open source relational database management system https://dev.mysql.com/doc/refman/8.0/en/ Conflicts with: mariadb (because mysql, mariadb, and percona install the same binaries) percona-server (because mysql, mariadb, and percona install the same binaries) /opt/homebrew/Cellar/mysql/8.1.0 (325 files, 308.4MB) * Poured from bottle using the formulae.brew.sh API on 2023-09-22 at 19:11:23 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/m/mysql.rb License: GPL-2.0-only with Universal-FOSS-exception-1.0 ==> Dependencies Build: bison ✘, cmake ✘, pkg-config ✔ Required: icu4c ✔, libevent ✘, libfido2 ✘, lz4 ✔, openssl@3 ✔, protobuf@21 ✔, zlib ✘, zstd ✔ ==> Caveats We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -u root To start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: /opt/homebrew/opt/mysql/bin/mysqld_safe --datadir\=/opt/homebrew/var/mysql ==> Analytics install: 41,910 (30 days), 126,402 (90 days), 279,093 (365 days) install-on-request: 41,713 (30 days), 125,874 (90 days), 277,959 (365 days) build-error: 653 (30 days)
8 月の中旬にはアップデートされていたらしい、気付かなかったそんなの……。
どうする
mysql@8.0
とかいう Formula 指定すればインストールできる様子です。
❯ brew info mysql@8.0 ==> mysql@8.0: stable 8.0.34 (bottled) [keg-only] Open source relational database management system https://dev.mysql.com/doc/refman/8.0/en/ Not installed From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/m/mysql@8.0.rb License: GPL-2.0-only with Universal-FOSS-exception-1.0 ==> Dependencies Build: bison ✘, cmake ✘, pkg-config ✔ Required: icu4c ✔, libevent ✘, libfido2 ✘, lz4 ✔, openssl@3 ✔, protobuf@21 ✔, zlib ✘, zstd ✔ ==> Caveats We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -u root mysql@8.0 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. To start mysql@8.0 now and restart at login: brew services start mysql@8.0 Or, if you don't want/need a background service you can just run: /opt/homebrew/opt/mysql@8.0/bin/mysqld_safe --datadir\=/opt/homebrew/var/mysql ==> Analytics install: 1,746 (30 days), 2,248 (90 days), 2,247 (365 days) install-on-request: 1,746 (30 days), 2,247 (90 days), 2,247 (365 days) build-error: 112 (30 days)
とはいえ
mysql2 gem を更新していなかったので、ちょうどいいので僕は gem 更新します。 MySQL 自体もまあなんとかなるでしょこれでも。
ちなみに 9/25 時点では Compatibility の記載に MySQL 8.1 は入っていませんが mysql2 gem を 0.5.4 -> 0.5.5 にアップデートすることで無事うごきました。
❯ bundle update mysql2 ...snip... Installing mysql2 0.5.5 (was 0.5.4) with native extensions Bundle updated!
これにて解決。