1

我有一個使用Python 2.7/mod_wsgi 3.3運行Django 1.2.5的Django站點。大多數情況下,一切都很好,但是看起來網站總是隨機拋出錯誤。他們都最終形式:隨機Django TemplateDoesNotExist錯誤

TemplateDoesNotExist:XXX

這些模板肯定是存在的,而當我在那個導致異常的URL似乎總是工作輸入URL。但是,一旦大約每30頁瀏覽一次,就會拋出這個錯誤。

我發現這個職位關於類似的問題:http://leequerv.blogspot.com/2009/11/re-settingspy-seems-to-be-cached-or_24.html但我只運行一個Django應用程序,所以它似乎並不直接適用。

我正在使用一些子域中間件,根據我的網站的子域交換模板目錄(即,如果沒有子域,它使用常規模板目錄,如果它有m.xxx子域,則使用我的手機模板目錄) 。除了這些零星的生產服務器錯誤之外,所有這些在我的開發服務器和生產服務器上都很好。這是否有可能在很多人使用該網站時造成競爭狀況?

你有什麼想法可能導致它或我應該開始尋找?

編輯:

這裏就是模板目錄交換中間件部分代碼:

subdomain = getattr(request, 'subdomain', False) 

    if subdomain is not False: 
     try: 
      request.urlconf = settings.SUBDOMAIN_URLCONFS[subdomain] 
     except KeyError: 
      pass 
     try: 
      settings.TEMPLATE_DIRS = settings.SUBDOMAIN_TEMPLATE_DIRS[subdomain] 
     except KeyError: 
      pass 

這裏是保存模板的目錄信息我的設置文件的一部分:

SUBDOMAIN_URLCONFS = { None: 'my_site.urls', 'm': 'mobile.urls' }

JQM_TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "templates/mobile/"), 
) 

SUBDOMAIN_TEMPLATE_DIRS = { 
    None: TEMPLATE_DIRS, 
    'm': JQM_TEMPLATE_DIRS 
} 

編輯#2

這裏是我的回溯:

Traceback (most recent call last): 

 File "/home/my_username/webapps/my_site/lib/python2.7/django/core/handlers/base.py", line 100, in get_response 
   response = callback(request, *callback_args, **callback_kwargs) 

 File "/home/my_username/python-environments/my_site/lib/python2.7/site-packages/endless_pagination/decorators.py", line 55, in decorated 
   return view(request, *args, **kwargs) 

 File "/home/my_username/webapps/my_site/my_site/local_apps/team/views.py", line 68, in team_detail 
   return render_to_response(template, context, context_instance=RequestContext(request)) 

 File "/home/my_username/webapps/my_site/lib/python2.7/django/shortcuts/__init__.py", line 20, in render_to_response 
   return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 181, in render_to_string 
   t = get_template(template_name) 

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 157, in get_template 
   template, origin = find_template(template_name) 

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 138, in find_template 
   raise TemplateDoesNotExist(name) 

TemplateDoesNotExist: team_detail.html 
+0

當這個異常是Raise你得到一個錯誤頁面,或者頁面仍然呈現?如果它是第二選擇,那麼也許我只是猜測它是django緩存(如果你使用其中一個),當它在緩存中找不到模板時可能會拋出此錯誤(因爲緩存超時或什麼所以永遠),然後從文件系統獲取模板來渲染它,所以它的工作,但它顯示錯誤,因爲緩存MISS!? – mouad 2011-03-19 16:36:53

+0

請問我們有更詳細的回溯嗎? – pyeleven 2011-03-19 16:56:42

+0

當引發異常時,應用程序崩潰,並且我的服務器顯示默認的500內部服務器錯誤頁面。它甚至不會提供正常的django 500.html頁面,因爲它無法找到該模板目錄。 – Spike 2011-03-19 16:58:02

回答

0

爲了解決這個問題,我刪除了所有的邏輯,參與交換的路徑到模板目錄。我的猜測是,當系統的python路徑得到改變時,其他併發請求有時會看到錯誤的python路徑集。

因此,我只是給移動站點和常規站點訪問模板目錄的相同路徑,並確保沒有相同名稱的衝突模板。