目前我在settings.py
文件中有此内容:
DEBUG = True
LOCAL = True
TEMPLATE_DEBUG = DEBUG
SITE_TITLE = 'Stack Overflow Question'
REMOTE_SITE_URL = "http://************:8080"
LOCAL_SITE_URL = "http://************:8000"
ADMINS = (
# ('Your Name', 'your_email@domain.com'),
)
MANAGERS = ADMINS
if LOCAL:
SITE_URL = LOCAL_SITE_URL
ROOT_URL = '/mnt/hgfs/Sites/************'
engine = 'sqlite3'
dbName = '************.db'
dbUser = ''
dbPassword = ''
dbHost = ''
dbPort = ''
else:
SITE_URL = REMOTE_SITE_URL
ROOT_URL = '/var/www/vhosts/www.*************.com/public/'
engine = 'mysql'
dbName = '************'
dbUser = 'www-data'
dbPassword = '************'
dbHost = ''
dbPort = ''
我的想法是,如果我将LOCAL=True
修改为false,我可以在sqlite3
数据库和服务器上保存的mysql
之间切换。但是使用SVN时这很麻烦。我想要的是settings.py
智能地知道它是在服务器上还是在本地运行的能力。有没有办法嗅探URL,IP或只是检查服务器上存在的文件而不是本地?我不仅在寻找一种解决方案,而且还在寻找一种不对服务器征税的解决方案。如果Django每次呈现页面时都检查文件是否存在可能会有点过重。有什么建议吗?
答案 0 :(得分:5)
每次渲染时都不会检查文件是否存在。它实际上只会在解释器进程启动时发生,这完全取决于您的部署配置。这取决于您的Web服务器设置的多样性,但如果您使用的是apache,主要是MaxRequestPerChild和StartServers,以及相关参数。例如,如果我有
StartServers 8
MaxrequestsPerChild 4000
在preforked apache中,我将测试该文件的前8个请求,再听32,000个请求,然后再测试该文件8次。 (是的,我知道很多比这更复杂。)
关键是,大多数加载代码的实现都不会经常重新提供settings.py文件。考虑到这一点,怎么样:
import os
if os.uname()[1] == 'my.development.server.com':
LOCAL = True
else:
LOCAL = False