1. ホーム
  2. django

[解決済み] Django Southを使用して移行履歴をリセットするための推奨される方法は何ですか?

2022-04-26 05:03:34

質問

South (0.7) と Django (1.1.2) を使ったマイグレーションがかなり蓄積され、ユニットテストにかなりの時間を消費するようになりました。ベースラインをリセットして、新しい移行セットを始めたいと思います。を見直しました。 サウスドキュメント また、通常の Google/Stackoverflow 検索 (例: "django south (reset OR delete OR remove) migration history") を行いましたが、明らかなものは見つかりませんでした。

私が考えた1つのアプローチは、quot;starting over" by "removing" South or "clearing" history manually (e.g. clear the db table, remove migration files from migrations director) and just re-run.It です。

<ブロッククオート

./manage.py schemamigration southtut --initial

そこで、どなたかこれをやったことのある方で、ヒントや提案をお持ちの方がいらっしゃれば、大変ありがたく思います。

解決方法は?

<ブロッククオート

EDIT - 以下のコメントは、@andybak に続く > 受け入れられた回答の前に読むことが重要なので、この一番上に置いています。

<ブロッククオート

ドミニクさん manage.py reset southに関するあなたのアドバイスは危険です。 を使用しているサードパーティアプリがある場合、データベースを破壊する可能性があります。 サウスは、以下の @thnee さんの指摘の通り、プロジェクト内に存在します。あなたの この回答は非常に多くのupvoteを獲得しているので、編集していただけると幸いです。 を追加し、少なくともこのことについての警告を加えるか、(さらに良いことに)それを変更する。 を反映させることで、@hobsのアプローチ(同じように便利で、かつ 他のアプリに影響を与える) - ありがとうございます - chrisv Mar 26 '13 at 9:09

回答は以下の通りです。

最初に 南の著者による回答 :

すべてのデプロイメントで同時に行うように注意すれば、特に問題はないはずです。個人的には、そうしています。

    rm -r appname/migrations/ 
    ./manage.py reset south 
    ./manage.py convert_to_south appname 

(注意点として、" reset south 「の部分は、すべてのアプリのマイグレーションレコードをクリアするので、他の2行をすべてのアプリに対して実行するか、選択的に削除してください)。

その convert_to_south は新しいマイグレーションを作成し、それをフェイクで適用します(データベースにはすでに対応するテーブルがあるので)。処理中にすべてのアプリテーブルを削除する必要はありません。

このような不要な開発用マイグレーションをすべて取り除く必要があるときに、開発用+本番用サーバーで私が行っていることは次のとおりです。

  1. 両者のDBスキーマが同じであることを確認する。
  2. 両側のmigrationsフォルダをすべて削除する
  3. ./manage.py reset south (as the post says) を両側で実行する = south tableをクリアする *。
  4. ./manage.py を実行します。 南部に変換する 両側で (0001の移行を偽装する)
  5. その後、再スタートしてマイグレーションを作成し、マイグレーションフォルダをサーバーにプッシュすることができます。

* ただし、他のアプリのうち1つだけをクリーンアップしたい場合は、south_historyテーブルを編集して、自分のアプリに関するエントリだけを削除する必要があります。