Django South を使用して移行履歴をリセットするための推奨される方法は何ですか? 質問する

Django South を使用して移行履歴をリセットするための推奨される方法は何ですか? 質問する

South (0.7) と Django (1.1.2) を使用した移行がかなり蓄積され、ユニットテストにかなりの時間を費やし始めています。ベースラインをリセットして、新しい移行セットを開始したいと思います。南の文書通常の Google/Stackoverflow 検索 (例: 「django south (リセットまたは削除または削除) 移行履歴」) を実行しましたが、明らかなものは見つかりませんでした。

私が検討したアプローチの1つは、Southを「削除」するか、手動で履歴を「クリア」して(たとえば、データベーステーブルをクリアし、移行ディレクターから移行ファイルを削除するなど)、再度実行して「やり直す」ことです。

./manage.py スキーマ移行 southtut --initial

したがって、以前にこれを実行したことがある方で、ヒントや提案をお持ちの方がいらっしゃいましたら、ぜひ教えてください。

ベストアンサー1

時間がかかりすぎる移行を(1つのアプリのみ)選択的にリセットする必要がある場合は、これ私にとってはうまくいきました。

rm <app-dir>/migrations/*
python manage.py schemamigration <app-name> --initial
python manage.py migrate <app-name> 0001 --fake  --delete-ghost-migrations

手動で復元することを忘れないでください依存関係他のアプリでは、のすぐ下の移行クラスの最初の属性として、 のような行をファイルdepends_on = (("<other_app_name>", "0001_initial"),("<yet_another_app_name>", "0001_initial"))に追加します。<app-dir>/migrations/0001_initial.pyclass Migration(SchemaMigration):

その後./manage.py migrate <app-name> --fake --delete-ghost-migrations、他の環境でも同様にこのSOの答えもちろん、削除を偽装したり、を偽装したりする場合は、migrate zero次のような移行で残ったデータベーステーブルを手動で削除する必要があります。これ

より根本的なオプションは、./manage.py migrate --fake --delete-ghost-migrationsライブ デプロイメント サーバーで [my]sqldump を実行することです。次に、移行された完全に設定されたデータベースが必要な環境の [my]sql にそのダンプをパイプします。冒涜的な行為であることは承知していますが、私の場合はうまくいきました。

おすすめ記事