macOS での Rails 開発
失敗しがちな macOS 環境上での mysql2 セットアップに関するメモ書き
Categories:
Gemfile で mysql2
をセットアップするときにコケるとき
ld: library not found for -lssl
IntelアーキテクチャのMacBookなので M1 等のARMでは事情が異なるため注意。
-----
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.19/lib
-----
creating Makefile
current directory: /Users/your-username/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/your-username/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/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
解決策
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
その他解決ケース2
エラー内容によってケースバイケース
bundle config build.mysql2 --with-opt-include=/opt/homebrew/include --with-opt-lib=/opt/homebrew/lib
.bundle/config
BUNDLE_PATH: "vendor/bundle"
BUNDLE_BUILD__MYSQL2: "--with-opt-include=/opt/homebrew/include --with-opt-lib=/opt/homebrew/lib"
MySQLに接続出来ずにハマる
問題点
Docker で MySQL サービスを立ち上げたものの、ローカルも mysql からは接続ができない。
コンテナ内の mysql クライアントでは接続できるほか、PHPMyAdmin のような管理Webからはアクセスができる。
ローカルのクライアントからのみ接続ができない。
mysql -u root -p -h 127.0.0.1
結論
別のmysqldが起動していた
docker ps
で重複起動がないかを確認していたので、ポート重複はないと油断していた- これまでのmac上で問題がなかったので先入観が邪魔をしていた
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6618 username 23u IPv4 0x55c7c33604560444 0t0 TCP localhost:mysql (LISTEN)
com.docke 91253 username 84u IPv6 0x50013fa53431babd 0t0 TCP *:mysql (LISTEN
結果、PCを再起動したことで mysqld プロセスが消えた。
❯ lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 2313 username 143u IPv6 0x23a3e4503d368749 0t0 TCP *:mysql (LISTEN)