rake db:reset と rake db:migrate:reset の違い

rake db:reset と rake db:migrate:reset はどちらも一旦全ての DB を drop(削除)した後に DB 作成し直すコマンドですが、明確な違いがあります。Ruby on Rails チュートリアル:実例を使って Rails を学ぼうでは、rake db:reset しか出てこないのですが、rake db:migrate:reset も知っていると状況次第でとても便利です。というか、私はむしろこちらを多用しています。

スポンサーリンク

— 環境 —
rails-4.0.1

rake db:reset は db/schema.rb からDB作成

db/schema.rb は、これまで行われたマイグレートがまとめてあり、現在のDBをそのまま再現するためのファイル。rake db:reset については RoR Guides に以下のように説明してあります。

4.2 Resetting the Database

The rake db:reset task will drop the database, recreate it and load the current schema into it.

訳: rake db:reset は DB を drop して、現在の scheme をロードして DB を作り直します。

つまり、DB再作成に db/schema.rb が利用されて、db/migrate/**.rb は使われません。

rake db:migrate:reset は db/migrate/**.rb からマイグレーション

これに対して、rake db:migrate:reset は以下の通り。

rake db:migrate:reset
databaseを一度削除してもう一度作成し、db:migrate実行

DB を drop した後、通常通りのマイグレート(db:migrate)が行われます。つまり、db/migrate/**.rb が古い順から全て実行される。

例えば、新しくマイグレートファイルを作成してマイグレートを実行した後、カラムのデータ型やオプション指定を修正したくなって、その作成したばかりのマイグレートファイル自体を修正してマイグレーションを新たに適用したい場合。

ここで、rake db:reset とやると、DB再作成が db/schema.rb をロードして行われるので、修正が適用されません。rake db:migrate:reset とやると、db/migrate/ 以下のファイルが全て実行されてマイグレートが行われるので、無事に修正が適用されてデータベースが作成される。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!