使用本地Django 1.1的Google App Engine会出现间歇性故障

时间:2010-06-06 22:53:00

标签: python django debugging google-app-engine intermittent

我正在使用适用于Google App Engine的Windows Launcher开发环境。

我已经下载了Django 1.1.2源代码,并取消了“django”子目录,以便在我的应用程序目录(app.yaml的同行)中生存

在每个.py源文件的顶部,我这样做:

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

在我的文件settings.py中(也位于app目录的根目录下),我这样做:

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抱怨没有定义DJANGO_SETTINGS_MODULE 2)Django抱怨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 个答案:

答案 0 :(得分:1)

首先,虽然django现在与app引擎的兼容性比以前更多,但两个平台之间仍存在一些主要的不兼容性,这意味着你不能只将django的库存副本转储到你的appengine目录中并拥有它开箱即用。事情会以奇怪的方式出错。

有许多项目旨在提高两个项目之间的兼容性,最突出的是app-engine-patch。我强烈建议您阅读以下文章http://code.google.com/appengine/articles/app-engine-patch.html以及位于django标签下的code.google.com/appengine/articles/上的其他文章。

至于你们中的一些问题,你可以在你的设置脚本中尝试这个:

#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)

这就是django在内部用于在manage.py中设置环境的内容,也是设置django用于脚本(如app引擎)的最佳实践。

答案 1 :(得分:0)

我遇到了完全相同的问题,而且我无法解决这个问题...虽然我发现实际的GAE比我运行的开发服务器的情况要少得多我的Linux工作站。