我倾向于在进行Django 开发时使用SQLite,但在实时服务器上经常需要更强大的东西(例如MySQL/PostgreSQL).不变的是,Django设置还有其他变化:不同的记录位置/强度,媒体路径等.
如何管理所有这些更改以使部署成为一个简单的自动化流程?
Jim*_*Jim 85
更新: django-configurations已经发布,对于大多数人而言,这可能比手动更好.
如果您更愿意手动操作,我的早期答案仍然适用:
我有多个设置文件.
settings_local.py - 特定于主机的配置,例如数据库名称,文件路径等.settings_development.py- 用于开发的配置,例如DEBUG = True.settings_production.py- 用于生产的配置,例如SERVER_EMAIL.我将这些与settings.py首先导入的文件settings_local.py以及其他两个文件中的一个绑在一起.它决定通过两个设置加载哪个settings_local.py- DEVELOPMENT_HOSTS和PRODUCTION_HOSTS. settings.py调用platform.node()查找正在运行的计算机的主机名,然后在列表中查找该主机名,并根据找到主机名的列表加载第二个设置文件.
这样,您唯一需要担心的是settings_local.py使用特定于主机的配置保持文件最新,并自动处理其他所有内容.
在这里查看一个示例.
Gab*_*oss 26
就个人而言,我使用单个settings.py进行项目,我只是让它查找它所在的主机名(我的开发机器的主机名以"gabriel"开头,所以我只有这个:
import socket
if socket.gethostname().startswith('gabriel'):
LIVEHOST = False
else:
LIVEHOST = True
Run Code Online (Sandbox Code Playgroud)
然后在其他部分我有这样的事情:
if LIVEHOST:
DEBUG = False
PREPEND_WWW = True
MEDIA_URL = 'http://static1.grsites.com/'
else:
DEBUG = True
PREPEND_WWW = False
MEDIA_URL = 'http://localhost:8000/static/'
Run Code Online (Sandbox Code Playgroud)
等等.可读性稍差,但它工作正常,节省了不得不兼顾多个设置文件.
Dmi*_*nko 23
在settings.py结束时,我有以下内容:
try:
from settings_local import *
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud)
这样,如果我想覆盖默认设置,我需要将settings_local.py放在settings.py旁边.
Joh*_*kin 11
我有两个文件.settings_base.py其中包含常用/默认设置,并检入源控件.每个部署都有一个单独的settings.py,from settings_base import *在开始时执行,然后根据需要覆盖.
我找到的最简单的方法是:
1)使用默认的settings.py进行本地开发,2)创建一个以:开头的production-settings.py:
import os
from settings import *
Run Code Online (Sandbox Code Playgroud)
然后只需覆盖生产中不同的设置:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
DATABASES = {
'default': {
....
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23027 次 |
| 最近记录: |