特定のマイグレーションをロールバックする方法は?
次のマイグレーションファイルがある dbmigrate_20100905201547_create_blocks.rb
.
そのマイグレーションファイルを具体的にロールバックするにはどうすればよいですか?
759
13
次のマイグレーションファイルがある dbmigrate_20100905201547_create_blocks.rb
.
そのマイグレーションファイルを具体的にロールバックするにはどうすればよいですか?
ロールバックしたいマイグレーションが最後に適用されたものである場合、これを実行する方法があります。戻りたいマイグレーションの数だけ1を代入することができます。
例えば
また、その後に発生したすべてのマイグレーション(4、3、2、および1)をロールバックします。
対象となるマイグレーションを含むすべてのマイグレーションをロールバックするには、次のコマンドを使用します: (この修正コマンドは、元の投稿で誤りを指摘したすべてのコメントの後に追加されました)
特定の1つだけをロールバックする(順番が違う)には、次のようにします。
この場合、間にあるすべてのマイグレーションはロールバックされないことに注意してください -- リストされたものだけがロールバックされます。もしこれが意図したものでないなら、安全に
rake db:migrate
を実行して、その1つだけを再実行し、それまでロールバックされていなかった他のものをスキップすることができます。は、特定のファイルをロールバックします。
すべてのマイグレーションのバージョンを調べるには、次のコマンドを使用します。
または、単純にマイグレーション'のファイル名の接頭辞がロールバックする必要のあるバージョンです。
migrationsについては、Ruby on Railsガイドのエントリを参照してください。
最後のマイグレーションをロールバックするには、以下のようにします。
特定のマイグレーションをバージョンでロールバックしたい場合は、以下のようにします。
例えば バージョンが20141201122027であれば、あなたはそうします。
を使用して、その特定のマイグレーションをロールバックします。
マイグレーションをロールバックするには、
rake db:rollback
をさまざまなオプションをつけて使用します。構文はあなたの要件に応じて異なります。最後のマイグレーションだけをロールバックしたい場合は、次のどちらかを使用します。
または
一度にいくつものマイグレーションをロールバックしたい場合は、単に引数を渡すだけでよい。
ここで、
n
はロールバックするマイグレーションの数で、最新のマイグレーションから数えます。特定のマイグレーションにロールバックしたい場合は、そのマイグレーションのバージョンを以下のように渡します。
ここで、xxxxxはマイグレーションのバージョン番号です。
rake db:migrate:down VERSION=your_migrations's_version_number_here
のようになります。バージョンは、マイグレーションのファイル名の接頭辞の数字です。
バージョンの見つけ方.
移行ファイルは
rails_root/db/migrate
ディレクトリに保存されています。 ロールバックしたいファイルを探して、プレフィックス番号をコピーしてください。例えば
ファイル名を指定します。
20140208031131_create_roles.rb
とすると、バージョンは20140208031131
です。前回のマイグレーションをロールバック。
最後の
n
回の移行回数をロールバックする特定のマイグレーションのロールバック
最後のマイグレーションをロールバックするには、以下のようにします。
特定のマイグレーションをバージョンでロールバックしたい場合は、以下のようにします。
ロールバックしたいマイグレーションファイルが
db/migrate/20141201122027_create_some_table.rb
という名前であれば、そのマイグレーションの VERSION は20141201122027
であり、これはマイグレーションが作成されたタイムスタンプであり、そのマイグレーションをロールバックするコマンドは次のようになります。もしそれが可逆的なマイグレーションで、最後に実行されたものであれば、
rake db:rollback
を実行します。 そして、常にバージョンを使用することができます。 例えば移行ファイルは 20140716084539_create_customer_stats.rb なので、ロールバックコマンドは以下のようになります。
rake db:migrate:down VERSION=20140716084539
です。Railsガイド](http://edgeguides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations)より
前の移行を元に戻す
Active Recordの
revert
メソッドを使用して移行をロールバックする機能を利用することができます。revert` メソッドは、逆にするための命令ブロックも受け付けます。 これは、以前の移行で選択した部分を元に戻すのに便利です。 例えば、CreateBlockがコミットされ、後で郵便番号の検証にCHECK制約の代わりにActive Record validationsを使用するのが最善であると判断された場合を想像してみましょう。
移行は、コマンドを使用してデータベースの状態を変更します。
を使用して、単一の移行ステップを元に戻すことができます。
最初にさかのぼっていくには
お察しの通り、他の数字を 0 に置き換えると、そのバージョン番号に移行します。
特定のバージョンまでのすべての移行をロールバックするには** (例:
2018100222222222
) (例:2018100222222222
) を使用します。(この質問に対する他の回答にあるような
db:migrate:down
ではなく、db:migrate
を使うことに注意してください)。指定されたマイグレーションのバージョンが現在のバージョンよりも古いと仮定すると、指定されたバージョンまでのすべてのマイグレーションをロールバックします。
例えば、
rake db:migrate:status
が最初に表示されたとします。ランニング。
結果として
参考にしてください。 https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
まあ、レール5では簡単です。 rake db:migrate:status 或いは rails db:migrate:status
両方を同じように扱うように修正されています そして、ロールバックしたいバージョンを選択してください。 を実行して rake db:migrate VERSION=2013424230423
VERSION がすべて大文字であることを確認してください。
移行のいずれかのステップで問題が発生したり、途中で行き詰ったりした場合は、移行ファイルに移動して、既に移行された行をコメントアウトしてください。
お役に立てれば幸いです。
ロールバックして移行したい場合は実行します。
と同じですね。