2017-01-19 128 views
0

我無法理解從本地切換到生產設置以部署Django項目。如果有問題,我正在使用Ubuntu虛擬機(VM)。在Django中實現生產設置

我瞭解如何配置我的設置。我瞭解創建設置文件的最佳做法(base.py,local.py,production.py,blah,blah)。我知道在本地開發DEBUG = True,在生產DEBUG = False,等等,等等。

但是我怎麼實現這個轉換,在部署?我是否擺脫了local.py?我是否創建了某種邏輯,以便我的VM只讀取base.py和production.py?

什麼是最好的方法?

+0

我會建議你避免多重設置文件,而是使用[Django的ENVIRON(https://github.com/joke2k/django-environ)來處理不斷變化的設置環境變量。結帳[12-factor-app](https://12factor.net) –

+0

感謝Gustavo的回覆。你的建議確實很誘人。然而,我有要求和應用程序,我不想在生產(測試應用程序,文檔生成器等)的東西。直到我找出一個更清晰的解決方案,現在我會保留我的settings.local.py版本控制,並始終從生產準備git回購部署。保重。 –

回答

0

我不知道的最好的辦法,但我做什麼工作?

在我的settings.py的腳下,我有:

try: 
    from local_settings import * 
except ImportError, e: 
    pass 

我把我所有的地方發展local_settings.py中覆蓋任何生產設置的設置。我也確保不要上傳我的local_settings.py文件!

0

你可以做的是在環境此刻正在使用您的設置PY檢查。 爲此,您可以在系統上設置一個環境變量,該環境變量在開發環境和生產環境中具有不同的值。

您可以通過

sudo -H gedit /etc/environment 

設置這些環境變量,並添加以下行的文件中:

DEBUG="true" 

(使這種改變提供你將不得不註銷並重新登錄在進入你的系統)

在生產環境

那麼您需要設置調試=「假」。
那麼您可以在您的settings.py做到這一點:

DEBUG = os.environ.get('DEBUG', 'true') != 'false' 

,然後你可以設置每個設置,將取決於這樣使用環境有所不同:

if DEBUG: 
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' 
else: 
    STATICFILES_STORAGE = STATICFILES_STORAGE = 'custom_storages.StaticStorage' 

(中如果設置在開發環境中,則使用本地django服務器爲靜態文件提供服務;如果在生產環境中(在custom_storages模塊中定義),則使用boto amazon s3 0123推動你的更新,並始終根據環境選擇正確的設置。