管理多个settings.py文件

Pab*_*ruz 16 python apache deployment django

可能重复:
如何在Django中管理本地vs生产设置?

我已经设法成功部署Django项目上的Apache的Web服务器使用mod_wsgi.

我想了解一些如何管理多个settings.py文件的建议.现在我有一个用于开发,一个完全不同于生产(关于数据库参数,静态内容本地化和类似的东西).我的settings.py文件是版本化的(不知道这是不是一个好习惯)我用以下内容部署它:

$ hg archive myproject.tbz2
$ cd /path/of/apache/web/project/location
$ bzip2 -db /home/myself/myproject/myproject.tbz2 | tar -xvf -
Run Code Online (Sandbox Code Playgroud)

它工作正常.但我发现自己在操纵多个settings.py文件.

我想我的问题是:在为多个文件版本部署DJANGO PROJECTS时,最佳做法是什么settings.py

Mat*_*kel 27

我使用的设置模块不是单个文件:

settings/
    __init__.py
    _base.py
    _servers.py
    development.py
    production.py
    testing.py
Run Code Online (Sandbox Code Playgroud)

__init__.py文件很简单:

from _servers import get_server_type
exec("from %s import *" % get_server_type())
Run Code Online (Sandbox Code Playgroud)

_base.py文件包含所有服务器类型的所有常用设置.

_servers.py文件包含一个函数get_server_type(),用于socket.gethostname()确定当前计算机的服务器类型:它返回development,productiontesting.

然后其他文件看起来有点像(production.py):

DEBUG=False
TEMPLATE_DEBUG=False
from _base import *
Run Code Online (Sandbox Code Playgroud)

在每个文件中,我都放入了仅适用于此服务器类型的设置.


jbo*_*ros 9

似乎最常见的技巧是同时维护settings.py和local_settings.py(每个环境一个)文件.

环境无关的设置进入settings.py,在文件的底部,您将从local_settings.py导入

try:
    from local_settings import *
except ImportError:
    pass
Run Code Online (Sandbox Code Playgroud)

您可以覆盖相应local_settings.py中的任何settings.py设置


std*_*err 6

django-admin.py/manage.py都接受一个--settings=mysite.settings选项.在开发中,您可以明确指定--settings=dev_settings.您还可以DJANGO_SETTINGS_MODUL在apache配置中设置E环境变量.

就个人而言,我只是不检查settings.py.相反,我会检入多个设置文件(dev_settings,prod_settings等)并根据需要将它们符号链接到settings.py.这样,如果我只是检查我的应用程序,它将无法运行,直到我考虑哪个设置文件是合适的并实际放置该设置文件.

我听到的另一个建议但是我并不特别喜欢有一个settings.py动态导入dev_settings.py(如果存在).虽然这可能更方便,但我担心读取settings.py更难,并且在不查找dev_settings.py文件中可能存在或可能不存在的覆盖值的情况下知道实际设置是什么.