解決に割と時間がかかったので備忘録として残します。
状況
Docker環境でRailsを起動した後、ブラウザからocalhost:3000にアクセスすると
Can't connect to local MySQL server through socket '~/mysqld/mysqld.sock' (2)
というエラーが出る。
確認したこと・試したこと
- コンテナは起動しているか→
docker-compose ps
で確認。動いていた - MySQLが動いているか→
mysql -u root -p
で入れたので正常に動いていそう - イメージやボリュームを全削除してコンテナを再度作る→変わらず
いっぱいググってみたがそれっぽい解決方法がなかなか見つからず苦戦。
てかmysql.sockってなんだってのが全然わからず困った。
解決方法
探しに行っている場所にmysql.sockがないようなので、
とりあえずそのファイルが今どこにあるか探そうという方針で調べるキーワードを変えてみた。
結果、1つの記事に出会って解決しました。
-
mysql_config --socket
コマンドを使いmysql.sockの場所を特定する - database.ymlにmysql.sockのある場所を指定する
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
port: <%= ENV.fetch("DATABASE_PORT") {3306} %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV["MYSQL_ROOT_PASSWORD"] %>
host: db
socket: /tmp/mysql.sock
エラー文をしっかり読むことに加えて、何が問われているかを冷静になって考えなきゃなぁと反省です。
参考