2016-12-01 43 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扩展名,并且它们很好。

这是一种简单而有效的方法,可以为不同的环境(不论是本地,生产还是团队成员之间的本地)设置不同的设置。