【问题标题】:Most optimal way to programmatically check if site is running locally or on a server with Django?以编程方式检查站点是在本地运行还是在带有 Django 的服务器上运行的最佳方法?
【发布时间】:2010-02-19 18:28:53
【问题描述】:

目前我的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 呈现页面时都会检查文件是否存在,那么检查文件是否存在可能会有点繁重。有什么建议吗?

【问题讨论】:

    标签: python database django


    【解决方案1】:

    不会在每次渲染发生时检查文件是否存在。它实际上只会在您启动解释器进程时发生,这完全取决于您的部署配置。这将取决于您的网络服务器设置的多样性,但如果您使用的是 apache,主要是 MaxRequestPerChild 和 StartServers,以及相关参数。例如,如果我有

    StartServers 8
    MaxrequestsPerChild 4000
    

    在一个预分叉的 apache 中,我将针对前 8 个请求测试该文件,再侦听 32,000 个请求,然后再测试该文件 8 次。 (是的,我知道它比这复杂得多。)

    关键是,大多数加载代码的实现不会经常重新获取 settings.py 文件。考虑到这一点,如何:

    import os
    if os.uname()[1] == 'my.development.server.com':
        LOCAL = True
    else:
        LOCAL = False
    

    【讨论】:

    • 完美!再次感谢您的快速回复。我认为这很有效。
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2018-07-21
    相关资源
    最近更新 更多