Google App Engine с локальным Django 1.1 получает периодические сбои - PullRequest
5 голосов
/ 07 июня 2010

Я использую среду разработки Windows Launcher для Google App Engine.

Я скачал исходный код Django 1.1.2 и распаковал подкаталог "django", чтобы он находился в каталоге моего приложения (одноранговый узел app.yaml)

В верхней части каждого исходного файла .py я делаю это:

import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'

В моем файле settings.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. Я не использую явно другую часть django.

Однако периодически я получаю одну из двух ошибок:

1) Джанго жалуется, что DJANGO_SETTINGS_MODULE не определен.
2) Джанго жалуется, что common.html (шаблон, который я расширяю в других шаблонах) не существует.

95% времени эти ошибки не встречаются, и они случайно начинают появляться. Оказавшись в этом состоянии, локальный сервер кажется «заклинившим», и перезагрузка обычно исправляет его.

Что вызывает это, и что я могу с этим поделать? Как я могу даже отладить его?

Вот трассировка от ошибки:

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 в путь поиска шаблонов).

Ответы [ 2 ]

1 голос
/ 06 июля 2010

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

Существует ряд проектов, направленных на улучшение совместимости между двумя проектами, наиболее выдающимся из которых является app-engine-patch.Я настоятельно рекомендую прочитать следующую статью 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 для использования со скриптами (как движок приложения).

0 голосов
/ 02 июля 2010

У меня точно такая же проблема, и я не смог ее обойти ... хотя я заметил, что с реальным GAE это происходит намного меньше, чем с сервером разработки, на котором я работаю моя рабочая станция Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...