Google App Engine с локальным Django 1.1 получает прерывистые сбои
-
24-10-2019 - |
Вопрос
Я использую среду разработки запуска Windows для Google App Engine.
Я загрузил источник Django 1.1.2 и не переиграл подкаталог «django», чтобы жить в моем каталоге приложений (одноранговый Par of App.yaml)
В верхней части каждого исходного файла .py я делаю это:
import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
В моем файле stens.py (который также живет в корне каталога приложений), я делаю это:
DEBUG = True
TEMPLATE_DIRS = ('html')
INSTALLED_APPS = ('filters')
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.1')
from django.template import loader
Да, это выглядит немного как излишний, не так ли?
Я использую только django.template. Я явно не использую ни одной другой части Джанго.
Однако периодически я получаю одну из двух ошибок:
1) Джанго жалуется, что django_settings_module не определен.
2) Джанго жалуется, что общий.html (шаблон, который я протягиваю в других шаблонах) не существует.
В 95% случаев эти ошибки не встречаются, и они случайно начинают происходить. Оказавшись в этом состоянии, локальный сервер кажется «втиснутым» и перезагрузка его, как правило, исправляет его.
Что заставляет это произойти, и что я могу с этим поделать? Как я могу даже отладить это?
Вот Traceback от ошибки:
Traceback (most recent call last):
File "C:\code\kwbudget\edit_budget.py", line 34, in get
self.response.out.write(t.render(template.Context(values)))
File "C:\code\kwbudget\django\template\__init__.py", line 165, in render
return self.nodelist.render(context)
File "C:\code\kwbudget\django\template\__init__.py", line 784, in render
bits.append(self.render_node(node, context))
File "C:\code\kwbudget\django\template\__init__.py", line 797, in render_node
return node.render(context)
File "C:\code\kwbudget\django\template\loader_tags.py", line 71, in render
compiled_parent = self.get_parent(context)
File "C:\code\kwbudget\django\template\loader_tags.py", line 66, in get_parent
raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
TemplateSyntaxError: Template u'common.html' cannot be extended, because it doesn't exist
И edit_budget.py начинается с именно тех строк, которые я включил вверх.
Все шаблоны живут в каталоге под названием «HTML» в моем корневом каталоге, и существует «html/common.html». Я знаю, что шаблонный двигатель находит их, потому что я начинаю с "html/edit_budget.html", который расширяет common.html.
Похоже, что модуль настроек каким -то образом не применяется (потому что это то, что добавляет HTML к пути поиска для шаблонов).
Решение
Во -первых, хотя Django в настоящее время намного более совместим с App Engine, чем один раз, между двумя платформами все еще существуют некоторые серьезные несовместимости, что означает, что вы не можете просто сбросить фондовую копию Django в свой каталог Appengine и получить его. коробка. Вещи будут ошибочными странными способами.
Существует ряд проектов, которые направлены на улучшение совместимости между двумя проектами, наиболее заметным является приложение-монета. Я настоятельно рекомендую прочитать следующую статью http://code.google.com/appengine/articles/app-engine-patch.html и остальные статьи, расположенные по адресу code.google.com/appengine/articles/ под вкладкой Django.
Что касается некоторых из ваших конкретных проблем, вы можете попробовать это в своем скрипте настройки:
#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)
Это то, что Django использует внутреннюю часть для настройки среды в Manage.py, и является принятой лучшей практикой для настройки Django для использования со сценариями (например, App Engine).
Другие советы
У меня точно такая же проблема, и я не смог обойти это ... хотя я заметил, что это происходит намного меньше с настоящим GAE, чем с сервером разработки, который я запускаю на своей рабочей станции Linux Анкет