管理多个settings.py文件[重复]
Posted
技术标签:
【中文标题】管理多个settings.py文件[重复]【英文标题】:Managing multiple settings.py files [duplicate] 【发布时间】:2011-07-06 19:14:13 【问题描述】:可能重复:How to manage local vs production settings in Django?
我已经成功地使用mod_wsgi
在Apache的Web服务器上部署了一个Django项目。
我想要一些关于如何管理多个settings.py
文件的建议。现在我有一个用于开发和一个完全不同的用于生产(关于数据库参数、静态内容本地化等)。我的settings.py
文件是版本化的(不知道这是否是一个好习惯),我使用以下方式部署它:
$ hg archive myproject.tbz2
$ cd /path/of/apache/web/project/location
$ bzip2 -db /home/myself/myproject/myproject.tbz2 | tar -xvf -
一切正常。但我发现自己在处理多个 settings.py
文件。
我想我的问题是:在部署 DJANGO PROJECTS 时,关于多个 settings.py
文件版本的最佳做法是什么?
【问题讨论】:
How to manage local vs production settings in Django? 或 Django database settings for production server 或 Django dynamic settings infrastructure and best practices 的可能重复项 谢谢内德。我会投票结束我自己的问题。你提到的第一个有我正在寻找的答案。再次感谢。 【参考方案1】:我使用不是单个文件的设置模块:
settings/
__init__.py
_base.py
_servers.py
development.py
production.py
testing.py
__init__.py
文件很简单:
from _servers import get_server_type
exec("from %s import *" % get_server_type())
_base.py
文件包含所有服务器类型的所有通用设置。
_servers.py
文件包含一个函数get_server_type()
,它使用socket.gethostname()
来确定当前机器是什么类型的服务器:它返回development
、production
或testing
。
那么其他文件看起来有点像(production.py
):
DEBUG=False
TEMPLATE_DEBUG=False
from _base import *
在每个文件中,我都输入了仅适用于该服务器类型的设置。
【讨论】:
非常聪明的方法。我在这个问题上学到了很多东西。可能已经猜到了,我正在 DJANGO 中迈出第一步...... :-)【参考方案2】:似乎最常见的技巧是同时维护 settings.py 和 local_settings.py(每个环境一个)文件。
与环境无关的设置进入 settings.py 并在文件底部,您将从 local_settings.py 导入
try:
from local_settings import *
except ImportError:
pass
您可以覆盖相应 local_settings.py 中的任何 settings.py 设置
【讨论】:
真棒提示 jboutros。谢谢。会记住的。【参考方案3】:django-admin.py / manage.py 都接受--settings=mysite.settings
选项。在开发中,您可以明确指定--settings=dev_settings
。您还可以在 apache 配置中设置 DJANGO_SETTINGS_MODUL
E 环境变量。
就我个人而言,我根本不检查 settings.py。相反,我签入多个设置文件(dev_settings、prod_settings 等)并根据需要将它们符号链接到 settings.py。这样,如果我只是简单地检查我的应用程序,它就无法运行,直到我考虑哪个设置文件是合适的并实际放置该设置文件。
另一个我听过但我不太喜欢的建议是有一个 settings.py 可以动态导入一个 dev_settings.py(如果存在)。虽然这可能更方便,但我担心如果不寻找 dev_settings.py em> 文件可能存在也可能不存在。
【讨论】:
谢谢迈克。你的回答真的很有帮助。【参考方案4】:我的首选方法是使用 ConfigParser 基于单个设置或环境变量加载单独的 ini 文件。无论如何,在 django wiki 中描述了许多不同的选项:http://code.djangoproject.com/wiki/SplitSettings
【讨论】:
另请参阅我对标记为可能重复的问题的扩展答案:***.com/a/9517763/384417以上是关于管理多个settings.py文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何为站点框架 django 设置多个 settings.py?