以编程方式检查站点是在本地运行还是在使用Django的服务器上运行的最佳方式?

时间:2010-02-19 18:28:53

标签: python database 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 个答案:

答案 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