2010-02-19 14 views
2

目前我有這在我的settings.py文件:以編程方式檢查站點是在本地運行還是在使用Django的服務器上運行的最佳方式?

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', '[email protected]'), 
) 

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假,我可以sqlite3數據庫而這保存在服務器上mysql之間切換。但是使用SVN時這很麻煩。我想要的是settings.py能夠智能地知道它是在服務器上還是在本地運行。有沒有辦法來嗅探URL,IP或只是檢查服務器上存在的文件而不是本地文件?我不僅在尋找解決方案,而且還不會對服務器徵稅。每次Django呈現頁面時,檢查一個文件是否存在都可能會佔用一個進程的負擔。有什麼建議麼?

回答

5

檢查文件是否存在不會在每次渲染髮生時發生。實際上,只有當您的解釋器進程啓動時纔會發生,這一切都取決於您的部署配置。這取決於你的web服務器設置的多樣性,但是如果你使用apache,主要是MaxRequestPerChild和StartServers以及相關的參數。例如,如果我在一個preforked阿帕奇有

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 
+1

完美!再次感謝您的快速響應。我認爲這很好。 – Sebastian 2010-02-19 19:15:13

相關問題