我有一个使用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 :
这是我的追溯:
答案 0 :(得分:0)
为了解决这个问题,我删除了所有涉及将路径交换到模板目录的逻辑。我的猜测是,当python路径被系统更改时,其他并发请求有时会看到错误的python路径集。
因此,我只是让移动网站和常规网站访问模板目录的相同路径,并确保没有相同名称的冲突模板。
答案 1 :(得分:0)
在我的情况下,问题是uwsgi配置(uwsgi.ini)。仍然不知道为什么,但希望能对别人有所帮助。
添加以下参数解决了我的问题:
disable-logging = True
max-worker-lifetime = 600