2010-08-06 23 views
9

現在我正在使用git進行Django部署,這對我來說似乎很滿意。我唯一的問題仍然是如何正確處理數據庫中的數據。例如。我經常需要在本地編輯來自生產站點的數據,並將數據放回生產站點(請注意,我正在討論數據更改而不是模式遷移!)。 我認爲工作流應該像下面這樣:在生產站點上轉儲數據>下載數據>在數據庫中加載數據>在本地進行更改>轉儲數據>爲數據製作差異>上傳差異&在生產站點應用更改。Django部署:處理數據庫中的數據

對我重要的是,這也適用於改變現有的數據庫行,刪除等...

所以,如果我開始與我自己的實驗: 1.將與任何的這項工作數據轉儲格式提供? 2.其他任何人都是這樣工作的,也許已經有一些(結構)腳本解決方案了?

+2

是否有機會在本地更改的數據同時在服務器上進行修改? 您可以創建一個界面,允許您直接在生產服務器上編輯數據嗎? – 2010-08-06 12:47:54

回答

6

我想轉儲/更改/恢復的表格非常小​​,它們只能通過公共接口進行讀取。使用以下方法:

  1. 數據在服務器上使用./manage.py dumpdata命令轉儲。
  2. 然後將結果文件提交到服務器上的VCS。
  3. 我拉改變並執行./manage.py loaddata。
  4. 更改完成後./manage dumpdata在本地執行。
  5. 結果文件將提交給VCS和被推回服務器
  6. ./manage loaddata命令在服務器中執行

這可以用織物是自動化的,例如

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

區別由VCS在內部產生。這種方法不適用於所有情況,但我發現它適用於簡單情況。

+0

因此,您還將沒有任何問題的轉儲(JSON)數據與VCS合併?我正在尋找一種方法,使我能夠例如。在生產系統中同時進行更改時,推送服務器上已更改的數據?我認爲在理論上合併JSON數據應該可行 - 我只是好奇,如果有人正在處理它! – 2010-08-10 12:49:33

+0

我沒有嘗試這個,因爲我的表更改很少。但它可能確實有效:在推送本地更改之前轉儲並提交併再次合併。 – 2010-08-11 10:59:03

2

1)我知道你不是在談論模式遷移。然而,有這樣的事情,如數據遷移。我已使用South對您描述的生產數據進行了一些更改。調查它可能值得您花一些時間。

2)恕我直言,應用差異不是最好的方式去修改數據庫轉儲。比起數據庫轉儲,差異和合並更適用於源代碼/文本。這就是說我很想知道是否有人在數據庫轉儲上成功完成diff/patch/merge。

+0

1)是的我到目前爲止使用South進行模式遷移,發現它對於數據只有一點不方便。 2)嗯,這正是我的觀點,從來沒有嘗試過,但好奇,如果差異將工作與json/xml無論轉儲! (當然不是用sql)。和「差異」可能不僅在unix意義上:) – 2010-08-06 11:47:05

+0

2)我相信有一些工具可用於XML差異等。從來沒有使用過它們。如果你發現一些有用的東西,請在這裏發帖! – 2010-08-06 11:49:14

1

如果您的數據庫後端是SQL Server,則Red-Gate有一個您可以使用的數據比較工具。不確定SQl服務器世界以外的哪些工具是avaiobale。

2

如果你下載>修改>上傳整個轉儲,你必須準備好數據丟失。在您下載,修改或上傳修改後的數據時生成/修改的任何數據將丟失

的最佳做法,以避免如果你可以修改生產數據庫的數據是:

  1. 創建基於本地修改SQL腳本,並執行它的生產數據庫,
  2. 創建視圖處理數據的變化並執行它生產的網絡服務器

,或者,如果您不能修改對生產數據庫的數據:

  • 創建轉儲,下載和本地加載,
  • 在本地修改數據,
  • 創建本地轉儲,
  • 比較與當地轉儲和遠程轉儲創建轉儲包含只修改/添加的記錄
  • 上傳和負載

載和負載部分在這種情況下會更快,但你會必須通過其他方式處理刪除