こんにちは!もとひろです。
今回はbin/rails db:reset
をして結構困ったので、bin/rails db:reset
についてまとめたいと思います。
bin/rails db:reset とは
bin/rails db:reset
を実行すると、
DBが削除され、その後セットアップが実行されます。
つまりbin/rails db:reset
は以下を順に実行するのと同じ意味になります。
DB削除:
bin/rails db:drop
DBのセットアップ:
bin/rails db:setup
bin/rails db:setup
を詳しくみていきましょう。
bin/rails db:setup とは
bin/rails db:setup
を実行すると
DBを作成し、スキーマファイルの読み込みとシードデータの読み込みを行います。
つまりbin/rails db:setup
は以下を順に実行するのと同じ意味になります。
DB作成:
bin/rails db:create
DBにスキーマファイルを読み込む:
bin/rails schema:load
DBにシードデータを読み込む:
bin/rails db:seed
bin/rails db:migrate
はないですね。
マイグレーションファイルを変更していても、関係ないことが分かります。
以前のスキーマファイルからテーブルを作成しているからです。
食い違いが起こることもあるので注意してください。
bin/rails db:migrate:reset
DBを削除・作成し、その後マイグレーションしてほしいときには
bin/rails db:migrate:reset
を実行します。
bin/rails db:migrate:reset
は以下を順に実行するのと同じ意味になります。
DB削除:
bin/rails db:drop
DB作成:
bin/rails db:create
マイグレーション実行:
bin/rails db:migrate
補足:bin/rails db:migrate
bin/rails db:migrate
はマイグレーションすると同時に、
bin/rails db:schema:dump
も実行しています。
まとめ
bin/rails db:reset
以下が実行されています。
bin/rails db:drop
bin/rails db:create
bin/rails schema:load
bin/rails db:seed
bin/rails db:migrate:reset
以下が実行されています。
bin/rails db:drop
bin/rails db:create
bin/rails db:migrate
両者の違い
「スキーマファイルからDBへ反映する」のか
「マイグレーションファイルからDBへ反映する」のか
が違います。
あとシードデータが読み込まれるかどうかも違いますね。
おわりに
こうやってみてみると1つのコマンドで同時に複数のことが実行されているのがよく分かります。
bin/rails db:reset
してその後bin/rails db:migrate
できない!というときは、
スキーマファイルから読み込んで作成されたテーブルとマイグレーションファイルがぶつかってる可能性があるので注意してみてください!
(私は複数回経験あります。苦笑)
おわりのおわりに
自学習中で1人で作業する際には、直接マイグレーションファイルを編集しても問題ありません。
共同作業者がいて開発をしている場合には、既存のマイグレーションファイルを直接書き換えて変更することはよくありません。
自分はもちろん、共同作業者も余計な作業が増えるからです。
そのような場合は、新しいマイグレーションファイルを作成しましょう。
Active Record マイグレーション - Railsガイド
参考リンク
Active Record Migrations — Ruby on Rails Guides
Active Record マイグレーション - Railsガイド
終わります👋