Случайные ошибки в шаблонах DjangoDoesNotExist - PullRequest
1 голос
/ 19 марта 2011

У меня есть сайт Django, работающий под управлением Django 1.2.5 с использованием Python 2.7 / mod_wsgi 3.3. По большей части все работает отлично, но кажется, что сайт выдает ошибки совершенно случайно. Все они заканчиваются в виде:

TemplateDoesNotExist: xxx

Эти шаблоны определенно существуют, и когда я набираю URL, который вызвал исключение, URL всегда работает. Тем не менее, примерно каждые 30 просмотров страницы, эта ошибка выдается.

Я обнаружил этот пост о похожей проблеме: http://leequerv.blogspot.com/2009/11/re-settingspy-seems-to-be-cached-or_24.html, но я запускаю только одно приложение Django, поэтому оно не применяется напрямую.

Я использую некоторое промежуточное программное обеспечение для поддоменов, которое меняет каталоги шаблонов в зависимости от поддоменов моего сайта (то есть использует обычные каталоги шаблонов, если нет поддоменов, и использует мои каталоги мобильных шаблонов, если у него есть поддомен m.xxx). Все это прекрасно работает, как на моем dev-сервере, так и на рабочем сервере, за исключением этих случайных ошибок рабочего сервера. Возможно ли, что это создает условия гонки, когда много людей используют сайт?

Есть ли у вас какие-либо идеи, что может быть причиной этого или где я должен начать искать?

Edit:

Вот часть кода промежуточного программного обеспечения, где переключаются каталоги шаблонов:

    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' }</p> <pre><code>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

Ответы [ 2 ]

0 голосов
/ 11 января 2019

В моем случае проблема была в конфигурации uwsgi (uwsgi.ini).До сих пор не знаю почему, но, надеюсь, поможет кому-то еще.

Добавление следующих параметров решило мою проблему:

disable-logging = True

max-worker-lifetime = 600
0 голосов
/ 30 марта 2011

Чтобы устранить эту проблему, я удалил всю логику, которая заключалась в обмене путями к каталогам шаблонов.Я предполагаю, что, когда пути python менялись для системы, другие параллельные запросы иногда видели неправильный набор путей python.

Таким образом, я просто предоставил мобильному сайту и обычному сайту доступ к одним и тем же путям к каталогам шаблонов и убедился, что нет конфликтующих шаблонов с одинаковым именем.

...