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を見に行ってくれないよう。