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

Jon*_*tte 5 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'
Run Code Online (Sandbox Code Playgroud)

在我的文件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
Run Code Online (Sandbox Code Playgroud)

是的,这看起来有点像矫枉过正,不是吗?

我只使用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
Run Code Online (Sandbox Code Playgroud)

并且edit_budget.py以我包含在顶部的行开头.

所有模板都存在于我的根目录中名为"html"的目录中,并且存在"html/common.html".我知道模板引擎找到它们,因为我从"html/edit_budget.html"开始,它扩展了common.html.
看起来好像设置模块没有应用(因为这是将html添加到模板的搜索路径的内容).

Tho*_*mas 1

首先,虽然 django 现在比以前更兼容应用程序引擎,但两个平台之间仍然存在一些主要的不兼容性,这意味着您不能将 django 的库存副本转储到您的应用程序引擎目录中并让它在应用程序引擎之外工作。盒子。事情会以奇怪的方式出错。

有许多项目旨在提高两个项目之间的兼容性,其中最突出的是 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)
Run Code Online (Sandbox Code Playgroud)

这是 django 在内部使用的用于在 manage.py 中设置环境的方法,也是设置 django 以与脚本(如应用程序引擎)一起使用的公认最佳实践。