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路径集。

因此,我只是给移动站点和常规站点访问模板目录的相同路径,并确保没有相同名称的冲突模板。