Railsのdb:migrate:resetとrails db:resetの違い
rails db:migrate:reset
とrails db:reset
の違いについて整理しました。
rails db:migrate:reset
では以下の内容が実行されます
1 全 DB を 削除 する (rails db:drop
と同等)
2 開発環境ととテスト環境の DB を作成する(rails db:create
と同等)
3 db/migrate/ 以下の全 migration ファイルを実行して、テーブルを再作成(rails db:migrate
と同等)
実際に実行してみると以下のようになります。
db の削除、db の作成、migration ファイルの実行が行われていることがわかります。
$ rails db:migrate:reset
Dropped database 'db/runteq_normal_development'
Dropped database 'db/runteq_normal_test'
Created database 'db/runteq_normal_development'
Created database 'db/runteq_normal_test'
== 20220108144831 SorceryCore: migrating ======================================
-- create_table(:users)
-> 0.0047s
== 20220108144831 SorceryCore: migrated (0.0049s) =============================
== 20220109062037 ChangeColumnNullToUsers: migrating ==========================
-- change_column_null(:users, :first_name, false)
-> 0.0182s
-- change_column_null(:users, :last_name, false)
-> 0.0138s
.
.
# 長いので割愛
データベースが一度削除されるので注意が必要。
新しいマイグレーションファイルを作って、変更できるようになった方が良い。
rails db:reset
では以下の内容が実行されます
1 全 DB を 削除 する (rails db:drop
と同等)
2 開発環境ととテスト環境の DB を作成する(rails db:create
と同等)
3 スキーマファイルからテーブルを作成(rails db:schema:load
と同等)
4 初期データの登録(rails db:seed
と同等)
補足で3 のスキーマファイルとはdb/schema.rb
のことです。
スキーマファイルはマイグレーションファイルが実行された結果を表しています。
つまり過去に作成したテーブルの情報が残っている時、それを利用してテーブルを作成します。
以下、実行結果になります
ちなみに、rails db:seed
はログが出ません。
$ rails db:reset
Dropped database 'db/runteq_normal_development'
Database 'db/runteq_normal_test' does not exist
Created database 'db/runteq_normal_development'
Created database 'db/runteq_normal_test'
-- create_table("authentications", {:force=>:cascade})
-> 0.0114s
-- create_table("boards", {:force=>:cascade})
-> 0.0067s
-- create_table("bookmarks", {:force=>:cascade})
-> 0.0137s
.
.
# 長いので割愛
今回は以上になります!
解りにくいところ、間違っているところなどあれば連絡いただければと思います。
何か連絡をしたい際は以下 SNS、メールでお願いいたします。
Twitter: https://twitter.com/naka_ryo_z
見出しへのリンク