djangoを使用してデータベースの変更をDVCS上で簡単に移動できるようにする方法
-
22-07-2019 - |
質問
概要
djangoでウェブサイトを構築しています。人々がフラットページの追加を開始できるようにし、管理者にいくつかの設定を設定する必要があります。その情報はクライアントから取得されるため、これらの変更は決定的なものでなければなりません。ただし、バックエンドも開発しているため、テーブルを作成および移行しています。これらの変更をハブにプッシュします。
ツール
問題
データベースの変更をオンラインサイトからLappyで確実に取得する方法、およびデータベースの変更をライブサイトにプッシュして、最小限の調整が必要な方法?私はgitフックに精通しているため、そのオプションが有効です。
補遺:
管理者が変更できるテーブルを知っていると思います。それほど多くのオーバーラップはないはずです。さらに考えると、危険なのは、自分がしたことを上書きするデータを me プッシュすることです。
ありがとう。
解決
スキーマの変更をサーバーに反映させるには、Southを慎重に使用してください。データが含まれている可能性のあるテーブルを変更する場合は、スキーマの移行と、必要に応じてデータの意味を保持するためのデータ移行の両方を作成してください。
更新されたデータを元に戻すために(これは重要ではないようですが、開発中に最新のテストデータを操作するのが良いかもしれません)、私は通常Djangoフィクスチャとdumpdataを使用しますおよびloaddataコマンド。フィクスチャをダンプしてリポジトリにコミットし、最後にロードデータをコミットするのは簡単です。
gitフックを使用してこれの一部を自動化することもできますが、自動化が必要な場合は、代わりにFabricのようなものを試すことをお勧めします。このようなものの多くは、プッシュ/プルするたびに実行する必要はありません(特に、頻繁に新しいデータフィクスチャをダンプしたくないでしょう)。
他のヒント
おそらく南を見てください:
ある種の継続的インテグレーションシステムを実行している場合、おそらく南からトリガーするgitフックを作成できると思われます。
それ以外の場合、プッシュを行うたびに、手動で移行手順を実行する必要があります。 「サイトはメンテナンス中です」ということを忘れないでください。メッセージ。 ;)
mk-table-sync を使用して、ライブサーバーからラップトップに変更をプルします。 mk-table-syncは多くのパラメーターを受け取るため、 fabric を使用してこのプロセスを自動化できます。基本的に、サーバーからプルする各タブレットでmk-table-syncを実行するファブリック関数を作成します。
これは、プルオーバーによって変更が上書きされるため、自分でダバターゼを変更できないことを意味します。
ライブデータベースに対して行う変更は、Southを使用している場合のみです。コードをサーバーにプッシュし、 migrate を実行してデータベーススキーマを更新します。