2016-12-01 41 views
-1

目前我的manage.py文件被硬編碼,導入我的local.py - 開發設置文件。這是「行業標準」的方式嗎?當我部署到服務器時,是否只需將manage.py更改爲指向我的生產設置文件?或者我應該以另一種方式設置它?Django本地到生產設置:只需更改manage.py?

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    # Hard coded imports local settings file 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

結構:

project/ 
    manage.py 
    settings/ 
     local.py 
     shared.py 
     production.py 
+0

可能的重複[在Django項目中基於環境處理不同配置/設置的最佳方法](http://stackoverflow.com/questions/40516873/best-way-to-handle-different-configuration-settings-based -on-environment-in-djan) –

+0

這是在文檔(https://docs.djangoproject.com/en/1.10/ref/django-admin/#runserver)中關於'manage.py'的第一件事情之一: 「請勿將此服務器用於生產環境」。 – Ivan

回答

2

號manage.py並沒有任何關係做生產運行Django的,所以改變它不會幫助的。

+0

想必他會在'wsgi.py'中有類似的代碼。 –

0

我的應用程序有一個設置文件,但這些值是從配置文件中讀取的,而不是硬編碼的。例如,數據庫部分看起來是這樣的:

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read('app.conf') 

DATABASES = { 
    'default': { 
     'ENGINE': config.get('database', 'engine'), 
     'NAME': config.get('database', 'name'), 
     'USER': config.get('database', 'user'), 
     'PASSWORD': config.get('database', 'password'), 
     'HOST': config.get('database', 'host'), 
     'PORT': config.get('database', 'port'), 
    } 
} 

的開發和生產服務器,每個服務器獲得自己app.conf文件(不包括版本控制,一個不錯的附帶好處)。

1

我想你想盡可能避免編輯manage.py。

處理此問題的另一種方法是使用默認的settings.py文件,但使用第二個local_settings.py文件進行擴展。

您可以通過將以下爲您settings.py文件的末尾這樣做:

locset = os.path.join(os.path.dirname(__file__), 'local_settings.py') 
if os.path.exists(locset): 
    with open(locset) as f: 
     code = compile(f.read(), "local_settings.py", 'exec') 
     exec(code) 

我通常保持DEBUG和數據庫設置在此local_settings.py文件。

當您這樣做時,您應該確保將local_settings.py添加到您的.gitignore

我還在settings.py文件旁邊加上了這個文件的示例版本,作爲local_settings.py.sample減去任何敏感的密碼/用戶名信息。

這個文件包含在回購中,所以新人可以創建他們的數據庫/用戶,只需填寫缺少的部分。他們只需要將其重命名爲.sample擴展名,並且它們很好。

這是一種簡單而有效的方法,可以爲不同的環境(不論是本地,生產還是團隊成員之間的本地)設置不同的設置。