管理多个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_wsgiApache的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() 来确定当前机器是什么类型的服务器:它返回developmentproductiontesting

那么其他文件看起来有点像(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_MODULE 环境变量。

就我个人而言,我根本不检查 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?

我正在努力解决如何在我的 django settings.py 中隐藏我的敏感信息 [重复]

Django settings.py中的静态文件管理设置

模板目录的路径在 settings.py 中不起作用

asd

Django项目配置settings.py详解