背景
rails db:setup
rails db:reset
rails db:migrate:reset
これらの違いをよく忘れるので、まとめてみました。
rails db:setup
$ rails db:create // 開発環境のDBを作成
$ rails db:schema:load // スキーマからテーブルを作成
$ rails db:seed // seedデータを投入
rails/activerecord/lib/active_record/railties/databases.rake
desc "Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)"
task setup: ["db:create", :environment, "db:schema:load", :seed]
rails db:reset
DBを削除してから、先程のsetup
をしているようです。
$ db:drop // 開発環境のDBを削除
$ db:setup
rails/activerecord/lib/active_record/railties/databases.rake
desc "Drops and recreates the database from db/schema.rb for the current environment and loads the seeds."
task reset: [ "db:drop", "db:setup" ]
rails db:migrate;reset
スキーマからではなく、マイグレーションを実行した結果としてテーブルが作られます。
seedも投入されません。
$ db:drop // 開発環境のDBを削除
$ db:create // 開発環境のDBを作成
$ db:migrate // マイグレーションを実行
rails/activerecord/lib/active_record/railties/databases.rake
# desc 'Resets your database using your migrations for the current environment'
task reset: ["db:drop", "db:create", "db:migrate"]
rails db:schema:load
-
db:setup
などで呼ばれる -
db/schema.rb
に沿ってテーブルを作る -
db:migrate(:reset)
を行うよりも高速かつエラーが少ない - テーブルが既存で上書きしたい場合は
force: true
オプションを付ける
参考
まとめ
-
rails db:reset
は、テーブルやレコードを正しい値(seed)に戻したい時に使う -
rails db:migrate:reset
は、マイグレーションをやり直しスキーマ自体を作り直したい時に使う
db:setup
はdb:reset
に含まれているので、中で行われる処理を知っておけばいいかと思います。