用Django编程检查网站是本地运行还是服务器运行的最佳方法?
目前我在我的 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 渲染页面时都要检查一个文件是否存在,这可能会比较耗资源。有什么建议吗?
1 个回答
5
检查一个文件是否存在并不是每次渲染的时候都会进行。实际上,这个检查只会在你的解释器进程启动的时候发生,而这又取决于你的部署配置。这会受到你的网站服务器设置的各种因素影响。如果你使用的是Apache服务器,主要的参数有MaxRequestPerChild和StartServers等。
举个例子,如果我在一个预先分叉的Apache服务器上设置了
StartServers 8
MaxrequestsPerChild 4000
那么我会在前8个请求中检查这个文件,接着再处理32,000个请求,然后再检查这个文件8次。(是的,我知道这比这要复杂得多。)
关键是,大多数加载你代码的实现不会频繁地重新读取settings.py文件。考虑到这一点,我们可以试试:
import os
if os.uname()[1] == 'my.development.server.com':
LOCAL = True
else:
LOCAL = False