1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails db:xxx の違いを忘れるのでまとめてみた

Posted at

背景

  • 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]

cf. https://github.com/rails/rails/blob/b60838b0ac7a9ba8ef26ef7a6abce70fbcf84f15/activerecord/lib/active_record/railties/databases.rake#L352-L353

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" ]

cf.
https://github.com/rails/rails/blob/b60838b0ac7a9ba8ef26ef7a6abce70fbcf84f15/activerecord/lib/active_record/railties/databases.rake#L293-L294

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"]

cf.
https://github.com/rails/rails/blob/b60838b0ac7a9ba8ef26ef7a6abce70fbcf84f15/activerecord/lib/active_record/railties/databases.rake#L169-L170

rails db:schema:load

  • db:setupなどで呼ばれる
  • db/schema.rbに沿ってテーブルを作る
  • db:migrate(:reset)を行うよりも高速かつエラーが少ない
  • テーブルが既存で上書きしたい場合はforce: trueオプションを付ける

参考

まとめ

  • rails db:resetは、テーブルやレコードを正しい値(seed)に戻したい時に使う
  • rails db:migrate:resetは、マイグレーションをやり直しスキーマ自体を作り直したい時に使う

db:setupdb:resetに含まれているので、中で行われる処理を知っておけばいいかと思います。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?