55

すべての移行のための簡単な rake db:rollback コマンドはありますか?

4

4 に答える 4

29

データベースを元の状態または最後のスキーマにするだけでなく、すべての移行を本当にロールバックしたい場合は、次を実行する必要があります。

rake db:migrate VERSION=0

これにより、実際にはすべての移行が完全にロールバックされ、すべての移行が元に戻せるようになります。

今発行する場合

rake db:migrate:status

すべての移行がまだそこにあることがわかりますが、それらは「ダウン」(適用されていない) 状態になっています。

rake db:resetorを意味する他のコマンドrake db:drop(@Orlando や @Alex Falke による回答など) は、ロールバックをまったく実行しません。つまり、すべての移行が元に戻せることを保証しません。

さらに、rake db:dropデータベースが他のユーザーによってアクセスされている間は実行できませんが、ロールバックはライブで実行できます (これは一般的に推奨されません)。最後に、データベースを単に削除して再作成すると、スキーマ移行テーブルも削除されます。データベースが削除された後に誰かが実行rake db:migrate:statusすると、「スキーマ移行テーブルはまだ存在しません」という応答が返され、手がかりがありません。どの移行を適用できますか (彼がまだそれを知っているか、それらをリストできる場合を除きます)。

于 2015-08-27T15:01:50.023 に答える
16

を使用するだけrake db:resetで、データベースが削除され (すべての移行を元に戻すのと同じ)、最後のスキーマにリセットされます。

更新: より正しいアプローチは を使用しrake db:migrate:resetます。これにより、最新のスキーマにリセットする代わりに、データベースを削除して再度作成し、すべての移行を実行します。

于 2013-04-24T12:25:14.187 に答える