1. ホーム
  2. django

Django 1.7 で migrations をリセットする方法

2023-09-25 07:38:22

質問

(これと同じタイトルがあることは知っていますが、質問は違います)。

開発機のマイグレーションと本番機のマイグレーションを同期させないように管理しています。

私は South を使用していた Django アプリを持っています。私は問題なく動作する独自のワークフローを持っていました (それはおそらく正しい方法ではなかったのですが、私はそれで問題を起こしませんでした)。

基本的に、私は本番データベース ダンプを私の開発マシンにコピーするスクリプトを持っています。それはまた、移行ファイルもコピーしました。そうすることで、2 つは同期し、私は通常どおり South コマンドを実行することができました。

現在、私は 1.7 にアップグレードし、マイグレーションを使用し始めました。以前のワークフロー (データベース ダンプと本稼働環境からの移行ファイルをコピー) を使用すると、私の開発マシンでの変更が検出されません。

migrations のドキュメントに目を通しましたが、それを使用するための正しい方法は

  1. 開発マシン上で "make migrations" と "migrate" を実行します。
  2. データベースの変更を実際に行うために、開発マシンで "migrate" を実行します。
  3. マイグレーション ファイルを含め、変更をコピーします。
  4. 本番マシンで "migrate" を実行します。("makemigrations" のステップなし)

とにかくです。今はすべてがめちゃくちゃです。私は、私の移行をリセットして、ゼロから始め、今後は適切に行いたいと思います。

私は何をする必要がありますか?

  1. 移行テーブルの内容を削除します (両方のマシンで)?
  2. 移行フォルダーの内容を削除しますか? (その中には init .py ファイルを含む)。
  3. 新しいものを作るために、ドキュメントに従ってマイグレーションを開始します。

何か見逃していることがありますか? 本番環境からすべて (データベースと移行ファイル) をコピーしても、私の開発マシン上で変更が検出されないのは、その後、何か理由があるのでしょうか?

どのように解決するのですか?

両方の環境で以下を実行するだけです(コードが同じである限り)。

  1. migrations フォルダを削除します。
  2. DELETE FROM django_migrations WHERE app =. <your app name> . 代わりに、このテーブルを切り捨てることもできます。
  3. python manage.py makemigrations
  4. python manage.py migrate --fake

この後、すべての変更は環境間で検出されるはずです。