2011-09-06 72 views
5

我寫過一個Django應用程序,現在我想讓它易於在多個服務器上部署。Django應用程序安裝腳本 - 如何將應用程序添加到INSTALLED_APPS設置?

基本安裝是:

  1. 複製app文件夾到Django項目文件夾
  2. 將它添加到INSTALLED_APPSsettings.py
  3. 運行./manage.py collectstatic

這種特殊的應用不需要使用數據庫,但如果使用了,我會使用南部並運行./manage.py migrate,但這是另一回事。

我遇到麻煩的部分是#2。我不想每次都手動編輯這個文件。什麼是最簡單/最健壯的方式來更新?

我想我可以使用inspect模塊來查找變量,然後以某種方式追加它,但我沒有任何運氣。 inspect.getsourcelines不會找到變量。

回答

2

這裏是我的原因,我認爲這將是錯誤的:

  • 它是沒有什麼大的需要額外的代碼的複雜性,每一次添加一行來設置並不壞,特別是如果你正在做的一步#1和#3。
  • 它將變得不明確你的項目使用什麼應用程序。當另一名開發人員在您的項目上工作時,他可能不知道您的應用程序已安裝。
  • 您應該在代碼版本控制系統上執行第1步和第2步,測試整個系統,然後提交更改並進行部署。

如果您正在尋找這樣的「優化」,我認爲您在開發/部署過程中出現了問題(從我的角度來看)。我認爲使用INSTALLED_APPS更容易和更好。

如果你正在建造一些供公衆使用的東西,並且你想盡可能簡單地添加模塊,那麼它會很好。在這種情況下,我會建議將項目和它的應用程序打包爲python egg並利用入口點。然後,您可以將應用部署到項目中,如下所示:

pip install my-app-name 

即使沒有第1步和第3步!步驟#1將通過pip完成,步驟#2和#3將通過項目中定義的安裝鉤子來完成。

Paste script爲切入點利用的一個很好的例子:

# Install paste script: 
pip install pastescript 

# install django templates for pastescript: 
pip install fez.djangoskel 

# now paste script knows about fez.djangoskel because of entry-points 

# start a new django project from fez's templates: 
paste create -t django_buildout 

這裏是fez.djangoskel包的setup.py部分:

... 
entry_points=""" 
[paste.paster_create_template] 
django_buildout=fez.djangoskel.pastertemplates:DjangoBuildoutTemplate 
django_app=fez.djangoskel.pastertemplates:DjangoAppTemplate 
... 

zc.buildout是另一個偉大的工具,它可能使你的部署更容易。 Python雞蛋搭建起來非常棒。

+0

(1)實際上它不僅僅是1行。這是在不同地方的幾行。我可以用同樣的方法來完成所有這些。1和3不會手動完成,它們也會自動完成。 (2)爲什麼不明確?該腳本會明確將其添加到INSTALLED_APPS。任何開發人員都可以通過查看settings.py來看到更新。 (3)不能。這是一個附加組件; settings.py可能會以我不想觸及的其他方式進行更改,因此版本控制它不起作用。出於同樣的原因,PIP將不起作用。我沒有可以插入鉤子的靜態settings.py文件.-- – mpen

+0

- 因爲settings.py由第三方維護。 – mpen

+0

@Mark,您可以擁有自己的設置文件,並且可以使用'from client_settings import *'加載第三方設置。然後,您可以動態修改INSTALLED_APPS屬性。 – Ski

相關問題