12

現在、私はDjangoのデプロイにgitを使用していますが、これは私にとって満足のいくものです。私の唯一の問題は、データベース内のデータを適切に処理する方法です。例えば。本番サイトからのデータをローカルで編集し、本番サイトに戻す必要があることがよくあります(スキーマの移行ではなく、データの変更について話していることに注意してください)。ワークフローは次のようになると思います。本番サイトでデータをダンプ>データをダウンロード>データベースにデータをロード>ローカルで変更を行う>データをダンプ>データのdiffを作成>diffをアップロードして本番サイトで変更を適用

私にとって重要なのは、これが既存のデータベース行の変更、削除などにも機能することです。

それで、私が自分でそれを実験し始めた場合:1.これはデータダンプ形式のいずれかで機能しますか?2.他の誰かがそのように働いていて、おそらくそのためのいくつかの(ファブリック)スクリプトソリューションをすでに用意していますか?

4

4 に答える 4

6

ダンプ/変更/復元したいテーブルは非常に小さく、パブリックインターフェイスを介して読み取り専用です。次のアプローチが使用されます。

  1. データは、サーバー上で./manage.pydumpdataコマンドを使用してダンプされます。
  2. 次に、結果ファイルがサーバー上のVCSにコミットされます。
  3. 変更をプルして./manage.pyloaddataを実行します。
  4. 変更が行われた後、./managedumpdataがローカルで実行されます。
  5. 結果ファイルはVCSにコミットされ、サーバーにプッシュバックされます
  6. ./manageloaddataコマンドがサーバーで実行されます

これはFabricで自動化できます。

1 + 2 + 3 = fab dump_data:cities、4 + 5 + 6 =fab push_data:cities

差分はVCSによって内部的に生成されます。このアプローチはすべてに機能するわけではありませんが、単純なケースには役立つことがわかりました。

于 2010-08-06T21:15:46.030 に答える
2

1)スキーマの移行について話しているのではないことを理解しています。ただし、データ移行などがあります。私はSouthを使用して、あなたが説明した本番データにある種の変更を加えました。それを調査することはあなたの時間の価値があるかもしれません。

2)diffを適用するIMHOは、データベースダンプを変更するための最良の方法ではありません。差分とマージは、データベースダンプよりもソースコード/テキストに適しています。つまり、データベースダンプでdiff / patch/mergeを正常に実行した人がいるかどうかを知りたいと思います。

于 2010-08-06T11:38:41.010 に答える
2

ダウンロード>変更>ダンプ全体をアップロードする場合は、データ損失の準備ができている必要があります。変更されたデータをダウンロード、変更、またはアップロードしているときに本番環境で作成/変更されたデータはすべて失われます。

本番データベースのデータを変更できる場合、それを回避するためのベストプラクティスは次のとおりです。

  1. ローカルの変更に基づいてSQLスクリプトを作成し、本番データベースで実行します。
  2. データ変更を処理するビューを作成し、本番Webサーバーで実行します

または、本番データベースのデータを変更できない場合:

  • ダンプを作成し、ダウンロードしてローカルにロードし、
  • ローカルでデータを変更し、
  • ローカルダンプを作成し、
  • リモートダンプをローカルダンプと比較し、変更/追加されたレコードのみを含むダンプを作成します
  • アップロードしてロードする

この場合、パーツのアップロードとロードははるかに高速になりますが、他の方法で削除を処理する必要があります。

于 2010-08-11T13:44:50.020 に答える
1

データベースバックエンドがSQLServerの場合、Red-Gateには使用できるデータ比較ツールがあります。ただし、SQlServerの世界以外で利用できるツールはわかりません。

于 2010-08-06T13:51:21.577 に答える