2009-10-09 65 views
9

我們目前使用SVN存儲庫來確保每個人的本地環境都保持最新狀態。但是,Drupal網站的開發有點棘手,因爲您編寫的任何自定義代碼(例如,爲節點主體編寫的PHP代碼)都存儲在數據庫中,並且更改無法被SVN工作副本識別。如何合併Drupal數據庫更改

有幾個開發人員目前在Drupal站點的同一區域工作,但我們不確定如何最好地將我們本地的Drupal數據庫更改合併在一起。提交數據庫轉儲補丁看起來似乎很笨拙,而且爲此目的很可能是低效率和容易出錯的。

有關如何解決此問題的任何建議,我們感謝!

回答

5

不幸的是,數據庫部署/更新是Drupals薄弱點之一。有關如何處理該問題的一些建議,請參閱this question & answers以及this one

至於CCK,你可以找到一些提示here

至於php代碼的內容,我同意googletorp在你應該避免這樣做。但是,如果出於某種原因,您絕對必須這樣做,您可以嘗試將代碼簡化爲一個簡單的函數調用。因此,你將在模塊中擁有該函數本身(並且這將通過SVN進行跟蹤)。但是,你只是從消除內聯代碼的需要只是一小步...反正

1

通過提交數據庫轉儲補丁,你的意思是採取數據庫的整個提取並在每次更改後提交它?

數據庫的主副本怎麼樣?將所有表,視圖,sps等等提取到單個文件中,將它們放到svn中,並對各個對象進行合併編輯?

+0

沒錯,意味着要全部提取物的數據庫。這個轉儲文件的輸出實際上取決於開發者如何指定輸出參數(有些可能會請求DROP IF EXISTS語句或者包含註釋),所以這不是很可靠。 提取每個表格對於它的價值而言似乎有點過於單調乏味,並且出現相同的不一致問題。 – David 2009-10-09 19:11:05

+0

我會標準化你如何提取腳本 - 例如,如果存在和權限聲明,標準格式化,總是有刪除。另外,如果你的對象是單獨編寫的,而且開發人員提交了與一次提交中的更改相關的所有對象,則它變得更易於管理。我假設當你提交併做出決定時,你正在瀏覽一個大文件並做很多滾動操作。當你處理單個文件時,這會迫使你專注於一件事情。您只需要在上次運行的生產狀態中提取所有內容並從那裏開始工作。 – Steve 2009-10-09 19:52:49

4

如果您將php代碼放入您的數據庫,那麼您做錯了。有些東西在數據庫內部,如視圖和cck字段以及一些設置。但是,如果您將php代碼放入節點主體中,您正在創建一個大代碼維護問題。您應該真正使用API​​和掛鉤。創建模塊,而不是與eval等醜陋的黑客。

+1

好的建議,謝謝。然而,這仍然會讓問題變得開放,以至於在整個事件在中央數據庫上運行之前,如何將開發人員對其本地環境所做的其他數據庫更改(例如添加CCK字段或節點設置)進行合併。自定義PHP代碼是內置於Drupal中的少數輸入類型之一(允許您可以在Drupal 6中禁用它),這表明它是該CMS的一個更靈活的特性,而不是醜陋的黑客。 – David 2009-10-09 21:09:26

+0

它存在快速和骯髒的工作,但通常被認爲是一個壞主意 - 所有評估代碼是應該避免的。你面臨的問題就是一個很好的例子。這是一個很好的功能,它對於快速實驗和構建CCK /視圖非常有用,您知道您將以平面文件代碼的形式導出和運行。 – Grayside 2009-10-09 23:38:03

2

以上所說的全部是真實的和好的建議..爲了回答你的實際問題,有一些最近的模塊您可以使用它來傳輸各種開發人員所做的更改。

「功能」模塊可以解決所描述的Drupal問題,通常提供很好的功能,儘管在數據庫中存儲了大量的配置和結構。此模塊使您能夠捕獲一個功能並將其作爲僞模塊輸出(符合具有.info和代碼文件以及所有模塊的模塊)。下面是它如何工作的:

  1. 選擇功能/功能導出
  2. 模塊分析了需要重建的特徵在其他地方
  3. 模塊的模塊,文件,數據庫內容創建一個僞模塊包含#3中的指令並輸出所有內容(甚至是SQL來重新構建數據庫中的東西)到模塊包中(以及設置其他模塊所需的依賴項)
  4. 在新站點上安裝僞模塊並啓用它
  5. 僞模塊複製特徵y歐出口重建DB數據和所有

你可以告訴你的老闆你做這一切與剃刀手動對焦,以避免甚至1個錯誤;) 我希望這有助於 - http://drupal.org/project/features