15

Railsのインストール用にデータベースをセットアップし、いくつかの移行をセットアップしました。データベースをリセットして、テーブル/制約などを持たないようにしたいのですが、移行の数や最初の移行のタイムスタンプを知らずにこれを行う合理的な方法が見つかりません。私が見たときの私のオプションは次のとおりです。

  • rake db:migrate:reset
  • rake db:migrate:down VERSION=20090701154839ここで、20090701154839 は最初の移行に関連付けられたタイムスタンプです
  • rake db:rollback STEP=1515回の移行があった場所

の問題db:migrate:resetは、最初にデータベースを削除することです (それはdb:dropdb:create、次にdb:migrate)。

問題db:migrate:downは、最初の VERSION をエンコードしたくないことです。

問題db:rollbackは、最初に戻るステップ数がわからないことです。

私のオプションは何ですか?

4

3 に答える 3

25
rake db:migrate VERSION=0

新しいタイムスタンプ付きの移行ファイルを使用している場合でも機能します。

更新: Rails 3.2.1 でこれをテストしたところ、まだ動作します。に知られているすべての移行の「ダウン」部分を実行しschema_migrationsます。3.1 で機能したかどうかはわかりませんが、以下のコメントは、この機能がその間に壊れていたことを示しています。

于 2009-07-28T21:23:57.637 に答える
3

上記の jdl の (正しい) ソリューションに加えて、これを達成するための別のハックな方法は dorake db:rollback STEP=1000000です1000000。できる限りロールバックし1000000ますSTEP

于 2009-07-29T14:23:18.070 に答える
0

ややハックですが、クエリを実行して schema_migrations の最初の VERSION を検索し、 rake db:migrate:down を呼び出してその VERSION を取得できます (アプリの「リセット」スクリプトをパッケージ化する必要があると想定しています)。

もちろん、それには、すべての移行で down メソッドが適切に機能する必要があります。

于 2009-07-28T20:14:50.210 に答える