随机Django TemplateDoesNotExist错误

时间:2011-03-19 16:28:01

标签: python django mod-wsgi race-condition django-endless-pagination

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

TemplateDoesNotExist:xxx

这些模板肯定存在,当我输入导致异常的URL时,URL似乎总是有效。但是,大约每隔30次页面查看一次,就会抛出此错误。

我发现此帖有关类似的问题:http://leequerv.blogspot.com/2009/11/re-settingspy-seems-to-be-cached-or_24.html但我只运行一个Django应用程序,因此它似乎不能直接应用。

我正在使用一些子域中间件,根据我网站的子域交换模板目录(即,如果没有子域,它使用常规模板dirs,如果它有m.xxx子域,则使用我的移动模板dirs)。除了这些零星的生产服务器错误之外,所有这些都在我的开发服务器和生产服务器上运行良好。当许多人使用该网站时,这是否有可能造成竞争条件?

你有什么想法可能导致它或我应该开始寻找的地方吗?

修改

以下是模板目录切换的中间件代码部分:

    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
}

JQM_TEMPLATE_DIRS = ( os.path.join(PROJECT_DIR, "templates/mobile/"), ) SUBDOMAIN_TEMPLATE_DIRS = { None: TEMPLATE_DIRS, 'm': JQM_TEMPLATE_DIRS }

编辑#2

这是我的追溯:

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

disable-logging = True

max-worker-lifetime = 600