管理多个settings.py文件

时间:2011-03-01 20:19:58

标签: python django apache deployment

  

可能重复:
  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文件。

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

4 个答案:

答案 0 :(得分:26)

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

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 *

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

答案 1 :(得分:8)

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

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

try:
    from local_settings import *
except ImportError:
    pass

您可以覆盖相应local_settings.py

中的所有settings.py设置

答案 2 :(得分:6)

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 (如果存在)。虽然这可能更方便,但我担心更难以阅读 settings.py ,并且在不查找 dev_settings.py中的覆盖值的情况下知道实际设置是什么em>可能存在或不存在的文件。

答案 3 :(得分:2)

我首选的方法是使用ConfigParser加载单独的ini文件,基于单个设置或环境变量。无论如何,在django wiki中有许多不同的选项:http://code.djangoproject.com/wiki/SplitSettings