2011-08-17 42 views
1

我正在處理一個django項目,即使在我寫這篇文章時,我們也會直播它。生產服務器是一個linode,作爲設置的一部分,我們擁有SSL和證書以及與開發和質量保證有幾點不同之處。如何使用GIT管理生產網站和設置?

在我settings.py,我有以下代碼:

import socket 
hostname = socket.gethostname().lower().replace('-', '_').split('.')[0] 

try: 
    exec("from %s_local_settings import *" % hostname) 
except ImportError: 
    pass 

這對於特定的Linode盒加載了本地設置。但是在同一個linode上,我們會有另一個項目實例(我們爲客戶託管的實例)。這首例就像廣告/演示/培訓。所以,我的小節點名稱hack不會工作....

如何在生產環境中處理這類問題?我們將很快備份鏡像數據庫,因此複雜性不斷增長,我不確定如何輕鬆跟蹤和維護所有更改。

我使用的是git,並且我創建了一個名爲production-www的分支,我猜測隨着我們前進,我將從master合併到production-www分支以及特定於此安裝的文件將不會被覆蓋(除了我現在沒有解決方案的節點名稱文件)。

任何人都在做比這更容易或更聰明的事情嗎?

+0

非常仔細。 – jathanism

+0

哈哈,那不是很有幫助。 – boatcoder

回答

2

將一個示例settings.py文件提交到存儲庫(例如:settings.py.example),然後使用每個部署的真實主機名進行復制和編輯 - 試圖檢測諸如主機名,路徑名等東西可以快速得到混亂。

新的部署不會因爲它不在存儲庫中而被破壞,但是你可能會告訴git忽略「settings.py」本身,所以你不會意外提交一個開發設置文件。

+0

這或多或少是我所做的,我喜歡它比任何我想爲自己的答案考慮的解決方法都更好;-)可能值得考慮'git assume-unchanged'而不是'.gitignore '文件;我有一個簡短的[博客文章](http://www.ellipsix.net/blog/2011/03/ignoring-project-files-in-git.html),但你也可以看一下git手冊弄清楚它是如何工作的。 –

+0

你是說你不打擾跟蹤設置文件的變化?你把它們拉出來,做出你需要的改變,然後再做一次,如果你部署到第二個備份/負載共享主機? – boatcoder

+0

不,不是說:我跟蹤settings.py.example。每一次新的部署我將它複製到settings.py並編輯它以適應部署實例。我確實傾向於將我需要改變的東西的數量保持在最低水平:主機名,絕對路徑,數據庫詳細信息,開/關調試。如果引入新的設置變量,實現默認值是一個好主意;所以沒有變量的現有設置文件不會立即中斷應用程序。 –

0

我修改了Silk Deployment這是一個基於Fabric的Python工具包,它使用Git同步部署配置。它旨在用於Django,它非常非常酷。很值得一看!

相關問題