2016-01-14 18 views
0

我正在構建一個使用Django的Web應用程序,它需要兩個不同的版本:企業版本和標準公共版本。到目前爲止,我一直在開發企業版,現在正在尋找最簡單的方法來分離這兩個版本,同時儘可能避免重複代碼。這兩個版本的主要區別在於他們需要不同的URL和不同的視圖。我打算使用多租戶架構基於子域進行區分,其中www.example.com是公共版本,而company1.example.com則是企業版本。如何讓Django應用程序的企業版和公共版共享一些代碼?

我想出了一對夫婦的潛在解決方案,但我不滿意他們中的任何一個。

  1. 單獨的Git倉庫和完全獨立的項目,所有常見的代碼都是重複的。這種代碼的重複必然會出現錯誤,因爲事情會出現不同步的情況,並且預計會出現複製粘貼錯誤。這是最後的解決方案。

  2. 單獨的Git存儲庫,通過Git子模塊(包含基本模型和共享視圖的單個常見「基礎」存儲庫)共享公共代碼。儘管我讀過關於git子模塊的恐怖故事,所以我對這個解決方案持謹慎態度。

  3. 單個Git倉庫包含多個'project'文件夾(公共/企業),每個文件夾都有自己的基礎urls.py,settings.py,wsgi.py等等)和多個manage.py文件來選擇「項目」運行。恐怕這個解決方案會變得一團糟,因爲如果需要更新之前的版本,公共版和企業版不可能使用通用庫的不同版本。

  4. 單獨的Git存儲庫,所有共享代碼都是作爲「可重用應用程序」開發並安裝到python路徑中。這將是一個稍微乾淨的解決方案,但是對於需要對通用模塊進行任何時間更改都很困難。

  5. 單個項目,其中所有功能均通過視圖中的條件邏輯進行管理。這將最容易出現錯誤和混亂,我寧願避免這種解決方案。

有沒有人有這種類型的解決方案的經驗或任何人可以幫助我找到這個問題的最佳解決方案?

回答

0

也許最好的解決方案是確切地確定兩個項目之間共享哪些代碼並使其成爲可重用的應用程序。

然後每個安裝都可以安裝該django應用程序,然後還有自己的站點特定代碼。

1

那麼「單個Git存儲庫,所有共享代碼被開發爲'可重用應用程序'」呢?這是配置使用INSTALLED_APPS設置啓用的選項。

首先你需要決定你的發佈過程。如果你打算同時發佈兩個版本,那麼使用一個git倉庫是有道理的。

如果您對代碼有不同的分發要求,例如,如果您希望公開版本中的代碼公開可用,並且企業版本是私有的。那麼你可能不得不使用兩個git倉庫。

+0

到目前爲止,我只用pip來管理這樣的依賴關係。如果我將這些應用程序作爲項目外部的可重用應用程序,我將如何將它們添加到Python路徑中?或者,我如何讓不同的版本依賴於通用應用的不同版本(例如V1和V2,如果沒有準備升級)? –

+0

如果你想獨立升級版本,這是一個跡象表明你需要不同的git倉庫 - 這也意味着你需要保證穩定的API等,所以不同的版本將是兼容的。 –

1

你看過使用git subtree嗎?它是子模塊的一種替代方案,它使得該過程稍微複雜一些。我認爲Atlassian在解釋它的使用方式和利弊方面做得很好。一些示例如下:

  • 「可以修改模塊的內容,而不必在其他位置單獨存儲依賴項的存儲庫副本。」
  • 「子項目的代碼在超級項目的克隆完成後立即可用。」
  • 「簡單工作流程的管理非常簡單。」

Atlassian鏈接是here

這裏也是git-subtree的描述file的鏈接。

相關問題