2009-07-28 4 views
14

私は、私のRailsインストール用にデータベースをセットアップし、いくつかの移行をセットアップしました。データベースをテーブル/制約/などがない状態に戻すことができるようにしたいのですが、移行の数や最初の移行のタイムスタンプを知らなくてもこれを行うには妥当な方法はありません。私はそれらを見るようにここに私のオプションは以下のとおりです。20090701154839は15のマイグレーション 最初にデータベースを削除せずに、データベースを最初のリビジョンに移行するにはどうすればよいですか?

db:migrate:resetに問題があった最初の移行

  • rake db:rollback STEP=15に関連付けられたタイムスタンプです

    • rake db:migrate:reset
    • rake db:migrate:down VERSION=20090701154839データベースを最初に削除するということです(db:dropdb:create、次にdb:migrate)。

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

      db:rollbackの問題は、最初に戻ったステップ数がわかりません。

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

  • 答えて

    25

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

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

    +0

    ありがとうございます。これは私が探していたものです。 rakeを試してみました:db:migrate:down VERSION = 0、しかしdb:migrateは特定のバージョンを探します。 –

    +0

    レール3.1.0では動作しませんrc 4: 'バージョン番号0での移行なし' –

    +0

    @ Marc-AndréLafortune私は同じ問題を抱えていました。 'rake db:migrate VERSION = 0 'を実行していることを確認してください(私はdb:migrate:down VERSION = 0を実行していました) – Qasim

    0

    これは適度にハッキリですが、schema_migrationsの最初のVERSIONを探してrake db:migrate:downを呼び出してそのVERSIONを取得することができます(私はあなたが "リセット"スクリプトをパッケージ化したいと思っていますあなたのアプリ)。

    もちろん、すべての移行でdownメソッドが正しく機能する必要があります。

    3

    上記のjdlの(正しい)ソリューションに加えて、これを達成するもう1つの方法はrake db:rollback STEP=1000000です。ここで1000000は、あなたが持つ移行の数よりも大きい数です。最大で1000000回までロールバックされますが、多くの場合はSTEPとなります。

    関連する問題