我已成功使用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 时,最佳做法是什么?
答案 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()
来确定当前计算机的服务器类型:它返回development
,production
或testing
。
然后其他文件看起来有点像(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