2009-08-28 67 views
5

我有一個由客戶在其服務器上安裝的django項目。我還有幾個應用程序是可以安裝/卸載的可選功能插件。什麼是包裝Django應用程序的好方法?

我想一個簡單的方法來包裝這些插件的應用程序,使安裝/卸載無痛。我不希望他們將模板文件複製到一個目錄,將應用程序複製到另一個目錄,將介質複製到另一個目錄,等等。我寧願他們不需要編輯settings.py,儘管如果它不能被幫助,它也可以。

理想的情況是,如果他們可以簡單地解壓縮到python的路徑(可能是特殊的插件目錄?)上的位置,並刪除它卸載。有沒有簡單的方法來打包應用程序,以便可以這樣安裝它們?

回答

4

我會跳過Python打包(的distutils,setuptools的,畫中畫等)的討論,因爲它聽起來就像你更喜歡使用簡單的zip文件或壓縮包。我會解決「痛點」,你提到一次一個:

模板文件:只要你有「django.template.loaders.app_directories.load_template_source」包含在你的項目的TEMPLATE_LOADERS設置,你不應該擔心這個。每個應用程序都可以有一個「templates /」子目錄,其中的模板將被加載,就像它們在您的項目範圍的模板目錄中一樣。

媒體文件:應用介質是一種痛苦。對於開發,您可以使用與app_directories模板加載器類似的自定義serve_media視圖(在每個應用程序中查找媒體)。在生產中,您必須複製文件,使用符號鏈接或使用Web服務器級別別名。有幾個實用程序應用程序試圖緩解這個問題;我現在使用django-staticfiles

編輯settings.py:圍繞這一沒有簡單的方法。要使其模型,模板標籤,管理命令等起作用,必須在INSTALLED_APPS中列出應用程序。你可以做的是在settings.py中寫一些自定義代碼,它列出了某個目錄的內容,並動態地將它找到的包添加到INSTALLED_APPS。有點危險(仔細考慮誰有權將文件放在該目錄中,因爲他們有你的王國的鑰匙),並且只有在服務器重新加載時才能檢測到新文件,但它應該可以工作。

我認爲,如果你放在一起這些解決方案,它可以實現你理想的情況:解壓安裝,刪除卸載。

+0

感謝您鏈接到djano-media-utils。那是機制中最大的痛苦。希望我們也可以指定多個媒體目錄。 我想動態地添加到INSTALLED_APPS是一個選項。由於您需要訪問服務器以放置插件,因此他們安裝人員可以訪問所有文件。你以前試過這個嗎? – Siddhi 2009-08-29 04:30:32

+0

不,我從來沒有試過動態的INSTALLED_APPS設置。在概念上,沒有太複雜的東西。在實踐中,有一個問題可能是需要在插件目錄中添加/刪除應用程序時重新啓動生產Web服務器。另外,如果插件應用程序可以包含模型,則需要制定必要的syncdb計劃。 – 2009-08-29 14:27:14

0

編輯settings.py:您的插件可以從自己的設置文件讀取其設置在自己的目錄中。他們只需要編輯根settings.py以從「INSTALLED_APPS」添加/刪除插件路徑。

相關問題