python - 带有本地 Django 1.1 的 Google App Engine 出现间歇性故障

标签 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(也位于应用程序目录的根目录下)中,我这样做:

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”。我知道模板引擎会找到它们,因为我从扩展 common.html 的“html/edit_budget.html”开始。
看起来好像没有应用设置模块(因为这是将 html 添加到模板的搜索路径)。

最佳答案

首先,虽然 django 现在与 App Engine 的兼容性比以前好很多,但两个平台之间仍然存在一些主要的不兼容性,这意味着您不能将 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 以与脚本(如应用程序引擎)一起使用的最佳实践。

关于python - 带有本地 Django 1.1 的 Google App Engine 出现间歇性故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986258/

相关文章:

debugging - 如何将多个 TestNG 套件结果合并到一份报告中?

python - 如何在for循环中分配索引?

python - 将 B 样条写为分段三次

Python:如何提高从vfp(dbf)到oracle加载数据的效率?

c - strcmp 的奇怪行为 [C]

c# - 如何找到一个值分配给哪个变量?

c++ - C++ 定义的函数中来自 Python 的默认参数?

python - Python 3.5 类型提示是否允许协变返回类型?

python - Gitpython 检查克隆的存储库

python - 覆盖Django RestFramework CreateModelMixin序列化器错误消息