1

我有一个使用 Python 2.7/mod_wsgi 3.3 运行 Django 1.2.5 的 Django 站点。在大多数情况下,一切都很好,但似乎该网站完全随机地抛出错误。它们都以以下形式结束:

模板不存在:xxx

这些模板确实存在,当我输入导致异常的 URL 时,该 URL 似乎总是有效。但是,大约每 30 次页面浏览,就会引发一次此错误。

我发现这篇关于类似问题的帖子:http: //leequerv.blogspot.com/2009/11/re-settingspy-seems-to-be-cached-or_24.html但我只运行一个 Django 应用程序所以它没有t似乎直接申请。

我正在使用一些子域中间件,它根据我的站点的子域交换模板目录(即,如果没有子域,它使用常规模板目录,如果它有一个 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
4

2 回答 2

0

为了解决这个问题,我删除了所有涉及将路径交换到模板目录的逻辑。我的猜测是,当系统的 python 路径发生变化时,其他并发请求有时会看到错误的 python 路径集。

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

于 2011-03-30T15:44:15.787 回答
0

在我的情况下,问题是 uwsgi 配置(uwsgi.ini)。仍然不知道为什么,但希望会帮助别人。

添加以下参数解决了我的问题:

disable-logging = True

max-worker-lifetime = 600
于 2019-01-10T22:12:19.913 回答