LoginSignup
5
6

More than 3 years have passed since last update.

【Rails】Mysql2::Error::ConnectionErrorの解消

Last updated at Posted at 2020-11-24

Railsアプリにバリデーションを定義した後の、テストデータ登録の成功が目的の備忘録です。その為、バリデーションの定義、記述は終わっている状態です。

データ保存したいのに、Mysql2に接続できない

Docker環境下のRailsアプリで、app/modelsにバリデーションを定義し、動作チェックの為にMySQLにデータ登録を試みました。そうしたら.....

Mysql2::Error::ConnectionError at /Unknown MySQL server host 'db' (0)

MySQLに繋がってないよと怒られました。

全く同じエラーにハマっている方も居ましたが、解決策は載っていません。
記事に載っていたdocker-compose upを実践するも、dockerは正常に起動していました。

いずれにせよ、データが登録できていないので、次はデータベースのチェックを行いました。

①rails db:create
②rails db:migrate

しかし、ダメでした。
下記はrails db:create実行後にターミナルに出力されたエラー

Unknown MySQL server host 'db' (0)
Couldn't create 'myapp_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (0)
/Users/athlaliel/test/qa-coin/bin/rails:9:in `<top (required)>'
/Users/athlaliel/test/qa-coin/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

この後も、色々試した結果、原因が分かりました。

Docker環境でアプリを作成しているのに、実際はローカル環境でひたすらコマンドを叩いていました。Docker上のコンテナでMySQLも管理されてる以上、見つかるわけがなかったです。

下記のコマンドを順に実行する事で無事にデータベースは作成され、更新も可能となりました。

①docker-compose exec web rails db:create 

②docker-compose exec web rails db:migrate

バリデーションのデータ登録

データベースがDocker上に出来たので、テストデータを登録しバリデーションが機能しているか試します。rails consoleを起動し、テストデータを登録していきます。

バリデーションに記述する文言はここでは書きませんが、変数を定義して<モデル名.create>と入力します。
このコマンドでデータ登録が成功すれば、SQLと同じ文言が表示され、データの保存まで行います。その為、別途<モデル名>.saveコマンドを入力する必要はありません。
validate.png

validate2.png
もしエラーが起きたら、下記コマンドでチェックして原因の追求を行います。

pry(main)> <モデル名>.errors

※user.rbというmodelsファイルがあれば、user.errorsとターミナルに入力します。

validate3.png

Mysql2::Error::ConnectionErrorのようなエラーに遭遇したら、自分が今どの環境で作業しているかのチェックを行ってみると良いでしょう。

参考記事
Unknown MySQL server host 'db' (0)エラーが消えない
Active Record バリデーション

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6