- 更新日: 2014年3月23日
- Rails
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 DatabaseThe 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/ 以下のファイルが全て実行されてマイグレートが行われるので、無事に修正が適用されてデータベースが作成される。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
- 2件のコメント
参考になりました!
ありがとうございます。
寒河江さん、こちらこそ記事をお読み頂きありがとうございます!