2014-11-01 48 views
2

我正在按照的方法Django的兩個勺子:最佳實踐Django 1.6關於多個設置文件。我使用Django 1.7和virtualenvwrapper。選擇正確的設置文件在Django中使用

我的設置如下:

project/ 
    app1/ 
    app2/ 
    project/ 
     __init__.py 
     settings/ 
      __init__.py 
      base.py 
      local.py 
      production.py 
    manage.py 

我有點困惑,Django是如何知道哪些設置文件使用。我不想每次運行manage.py時都指定設置文件。我寧願要設置DJANG_SETTINGS_MODULE環境變量作爲omouse雁here解釋說:

什麼混淆我是在wsgi.py文件有一行:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings.production") 

這個文件只有在使用生產服務器?如果我已經在服務器上定義了DJANGO_SETTINGS_MODULE環境變量,會發生什麼情況?

當我在本地運行它時,我知道每次打開控制檯時都需要設置DJANGO_SETTINGS_MODULE env變量。我讀過here,我可以在virtualenvwrapper中定義一個postactivate鉤子。然後,該鉤子將創建我每次激活環境時所需的環境變量。

這是確保在本地機器上加載正確的DJANGO_SETTINGS_MODULE env變量的推薦方法嗎?我是否也需要在我的託管服務器上設置一個類似的文件?我打算使用PythonAnywhere進行託管。

最後,如果我運行臨時服務器,我將如何告訴Django加載臨時設置文件?登臺服務器與生產服務器幾乎相同,所以我想爲登臺服務器需要一個不同的wsgi.py文件,但這似乎是一種反模式。

回答

2

os.environ.setdefault只在未設置的情況下設置該值。在生產環境中運行時,導出環境變量DJANGO_SETTINGS_MODULE並將其設置爲生產/臨時設置文件,並且在開發中運行時不需要設置任何內容(如果將其默認設置爲開發設置)。這是DRY-est方法。

該方法與local_settings.py(這是大多數時間保持在回購!)不是最佳實踐,應該避免。

+0

我絕對想要在回購中的所有設置文件。你是否同意在本地設置DJANGO_SETTINGS_MODULE env變量的最佳方法是在virtualenvwrapper中創建一個postactivate鉤子? – Johan 2014-11-01 10:21:10

+0

本地你不需要設置環境變量,因爲默認值應該是你的本地設置。在生產服務器上,我建議使用組合主管+ gunicorn。在啓動應用程序的腳本中設置環境變量,而不必再次設置它。 – Peter 2014-11-01 10:52:09

+0

如果DJANGO_SETTINGS_MODULE env變量未在本地設置,那麼Django如何知道要使用哪個設置文件? – Johan 2014-11-01 10:58:34

相關問題