私は混乱した色です。私たちが南の移行を伴うDjangoプロジェクトを持っていると仮定しましょう。現在、生産プロジェクトのバージョンはA
、バージョンはB
です。Southのロールバックはどのように動作するはずですか?
- は、新しいコード
- 実行
./manage.py syncdb && ./manage.py migrate
- 再起動のWebサーバーをインストールし、幸せになる:それでは、バージョン
B
が生産にインストールされているとしましょう。
次の前提:バージョンB
はまったく機能しません。開発中でしたが、実稼働環境にはありませんでしたので、ロールバックする必要があります。そして、私は何かが欠けているはずです。 2つの可能性があります。
- 古いコードが再インストールされています。現在、南のマイグレーションは適切ですが、これは不可能です。これは、古いコードに戻るために必要な最新の移行がすべて含まれていないためです。
- 最初にデータベースの変更をロールバックし、古いコードを再インストールします。ただし、バージョン
A
の最新の移行方法を確認するにはどうすればよいですか? 1つのプロジェクトで数十のアプリが簡単にカウントできるので、それぞれのアプリが古いバージョンに属しているかどうかを把握し、各アプリを別々に移行してからコードをロールバックし、
いずれの場合も、第1のケースの移行コードまたは第2のケースの「移行<->
バージョン」関係のいずれかの重要な情報が欠落しています。私はここで何が欠けていますか?
PS:はい、私はバックアップからデータベースを復元できることを知っています、これは私が実際にやっていることです。この全データベース移行理論がロールバックにどのように適合するかを知りたい。
本質的に、これは私が2番目の可能性として説明したものです。バックアップからデータベースを復元するのが簡単で、おそらくより速いので、多くの手動作業と一連の後方移行作業が敗北します。( –
あなたが必要とするマイグレーションファイルを取得して実行するスクリプトを書いてください。バックアップからのリストアははるかに遅くて、とりわけあなたのDBが成長しているようです。 – JohnO
簡単な解決法は、サウスがテキストファイルリストをここでデータベースは 'pip freeze'のやり方で現時点ではありますが、' ./manage migrate myapp xxxx'のすべてのコマンドを含めることができます。新しいブランチを作成しているときに出力をダンプして保存しますあなたがロールバックしたいときに実行してください。コミット後にファイルに名前を付けることができます。今のところ、 './manage migrat 'の出力を解析するスクリプトを書くことができますe - list'を実行してください。 – tobych