2009-09-30 110 views
13

從這個項目:What's best Drupal deployment strategy? ....我引用:Drupal DATABASE部署策略?

數據庫是棘手;清理開發/臨時數據庫並將其推送到現場對於初始推出來說是最簡單的,但如果實況網站上的用戶也正在生成內容,則在增量數據庫更新時會出現一些皺紋。

我要如何做到這一點的一些想法?目前,我在本地機器上獲得了現有數據庫的完整副本,提交該版本,然後部署整個數據庫。目前該文件是15megs,每次我必須上傳整個文件(我認爲Subversion將它視爲一個全新的文件,因爲它每次都有很多變化)。

所以,我的問題是真的:

  1. 我怎樣才能得到我的數據庫大小下來犯(小於經常犯除外)時?
  2. 是否有任何其他方式來保持我的數據庫和服務器數據庫同步?特別是考慮到用戶會一直髮布新的數據?

回答

13

是否有任何其他方式來保持我的分貝和服務器數據庫同步?特別是考慮到用戶會一直髮布新的數據?

我們有一個龐大的分佈式團隊和編輯人員,因此部署數據庫是不可行的。

爲了解決這個問題,我們大量使用更新函數。我們有一個沒有真實代碼的模塊,我們用它來更新設置。每當開發人員進行配置更改時,他們都會在此模塊中編寫更新功能,該功能在運行時會在其他開發數據庫上進行相應的更改,進行分級並生效。

有問題,特別是交叉依賴性(如果有人寫多個模塊更新功能),它可能需要一段時間來編寫的東西是在管理一個相對小的變化。 Install profile api在這方面有所幫助。

例如

function mysite_update_6000() { 
    install_include(array('user')); 
    $editor_rid = install_add_role('editor'); 
    install_add_permissions(DRUPAL_ANONYMOUS_RID, array('do something')); 
    install_add_permissions($editor_rid, array('do something', 'administer nodes')); 
    return array(); 
} 

將添加一個角色和分配一些權限給它。這樣做會保留代碼中的所有更改,以便您不必嘗試遷移和同步數據庫。

還有一個migration模塊可以幫助這一點,它記錄更改表,並將它們保存到一個更新功能。這不要與用於內容遷移的drupal.org遷移模塊混淆。

我們已經取得了一些成功,但也有一些問題與features模塊,它可以與遷移功能可幫助。

+1

+1 - 使用「虛擬」模塊以允許自定義更新功能的好主意。 – 2009-10-01 12:18:44

+0

@Jeremy:我發現你的方法非常有趣,因爲功能模塊不適用於所有的東西。但我想知道如何設法爲各種Druapl管理員編寫udpate代碼。例如,我啓用所有翻譯/語言環境相關的模塊,然後在我的所有菜單中創建翻譯版本的菜單項。你會在哪裏看到在這個更新函數中寫什麼代碼? – 2012-03-02 04:42:05

2

對於較小的項目,我們還是做一些類似當前的程序的東西在我們鎖定住實例僅通過阻斷與編輯權限的所有用戶閱讀,比轉儲數據庫,將其上傳到一個階段情況下,執行所有更新我們需要那裏,並且一旦滿意結果,我們切換舞臺實例成爲下一個活動版本。但即使是小的情況下,這也很痛苦,遠不是一個好的解決方案。

在兩個更大的項目中,我們和Jeremy在同一條船上,因爲整個設置對於部署完整的數據庫轉儲來說很複雜,特別是因爲我們無法將實例鎖定爲只讀模式更新。

對於這些,我們已經使用了Migraine在一定程度上(見this related discussion)。它不是一個Drupal模塊,而是一個Python腳本,我們根據自己的需要進行了一些調整。它旨在創建有點結構化的轉儲,將用戶提供的內容從設置和其他內容中分離出來,從而允許更多選擇性的更新和分段策略。但是,由於Drupal數據庫結構或多或少混亂(尤其是缺乏參照完整性實施),使用這種方法需要在添加新模塊時進行不斷調整,並且風險很大,因爲需要進行額外的轉儲/更新表。

我們試圖通過使用自定義模塊的更新功能來儘量減少對'批量'轉儲/更新操作的需求,並且我喜歡Jeremy Frenchs建議添加'虛擬'模塊,以便爲其他人添加更新功能設置!

總而言之,更新/遷移Drupal實例現在是一個很大的麻煩,我希望在未來的版本中會有更加一致的解決方案,儘管我可以看到很難提出一種通用的方法當前數據庫架構,並與個別添加自定義模塊那裏量:/


PS:Backup and Migrate是一個Drupal模塊,似乎採取類似偏頭痛腳本的方法,但我沒有用它然而。

2

Henrik和Jeremy對部署狀態給出了很好的答案。我也聽說過卡皮斯特拉諾(紅寶石)被用來取得良好效果。 DrupalCampLA Case Study描述了他們使用的部署機制(包括Capistrano),並且下載包據說包含了他們的部署腳本。

如果你希望儘量減少你的數據庫轉儲的大小,一定要對其進行定製,以排除高速緩存和看門狗表。默認情況下,備份和遷移的UI會向您顯示它認爲值得忽略的表。

+0

+1表示另一種選擇 - 我以前沒有聽說過Capistrano,但它看起來/聽起來很有希望檢查出來。 – 2009-10-02 13:10:31

1

要做到這一點,最好的辦法是讓你在代碼中的所有更改,並使用工具的features module推動改變分期和/或生產。

這是更多的工作,同時開發,這是事實,但如果你有一堆人誰都有自己的數據庫協同工作,或者你想輕鬆更改推到生產,特點是高清。要走的路。