wancoro blog

学んだことをアウトプットしていきたいと思います

Railsアプリからdocker上のmysqlに接続する方法

Railsアプリからdocker上のmysqlに接続する際にエラーが出てしまったため、事象と解決策を備忘録として残す。

開発環境

事象

最初に書かれていたdatabase.ymlはこんな感じ。

# config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

この記述だと rails db:create 時にエラーが出てしまった。

Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

mysql側でsocketの値を確認してみる。

mysql> show variables like '%socket%';
+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | -1                          |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+

こちらは問題なさそう。

解決策

database.ymlにホストを指定する記述を追加して解決。

# config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock
  host: 127.0.0.1    <-- ここを追加

これがないと、dockerを見に行ってくれないよう。