我有错误:
BadRequestError:app“dev~myapp”无法访问app“s~myapp”的数据
哪个相似,但是the opposite way around to this question。
答案似乎并不适用于我的应用程序(甚至尝试将其置于脑后) - 我只有一个应用程序,而且我没有使用远程API,而且我没有使用urlsafe密钥,并且我的所有关键属性都是db.ReferenceProperty
s或db.ListProperty( db.Key )
s。
错误出现在我尝试呈现的模板的第一行:
文件“/.../template.html”,第1行,位于顶级模板代码中
{% extends "page.html" %}
如果我注释掉该行,则会发生错误:
文件“/.../template.html”,第1行,位于顶级模板代码中
<!--{% extends "page.html" %}-->
在我应用模板魔法之前,向我建议错误是在实际使用Jinja加载模板。
template.html
使用作为实体列表的变量(不是Query
个对象,而是[e for e in queryObject]
s)呈现。如果我用空列表替换它们,页面呈现正常。
我的开发服务器的数据存储区中填充了来自生产服务器的备份,但到目前为止我还没有遇到访问这些条目的问题。我得到这些实体列表如下:
@staticmethod
def gql(query, *a, **kw):
keys = super(Model, Model).gql(query, *a, **kw).run(keys_only=True)
cached = []
for key in keys:
inCache = memcache.get('Model_'+str(key))
if inCache:
cached.append(inCache)
else:
fromDB = Model.get(key)
memcache.set('Model_'+str(key), fromDB)
cached.append( fromDB )
return cached
在使用Jinja渲染之前,我可以使用logging
打印结果。它在交互式控制台中也很好。
为什么这会成为访问其他应用程序数据的尝试,并在Jinja呈现时引发此异常?
答案 0 :(得分:3)
我发现原因 - db.ListProperty( db.Key )
的形式为:
[datastore_types.Key.from_path(u'ModelName', IDnumL, _app=u's~myapp')]
这是从使用this neat function的生产服务器备份导入到dev服务器。
不幸的是,正如我之前抱怨的那样,开发服务器不允许编辑db.ListProperty
(以及其他几种类型)。
我的解决方案是在交互式控制台中执行以下操作:
from google.appengine.ext.db import Key
for e in Model.all():
if e.keyList:
prod = e.keyList
dev = eval( str(prod).replace('s~','dev~').replace('datastore_types.','') )
e.keyList = dev
e.put()
答案 1 :(得分:0)
重新启动计算机后发生这种情况。 appserver产生了同样的错误,因为它无法连接到我的数据存储模拟器的local_db.bin。启动时的数据存储模拟器也会返回
严重:找不到后备存储,/ path / .config / gloud / emulators / datastore / WEB-INF / appengine-Generated / local_db.bin
所以我重命名了local_db.bin并重新运行了模拟器和dev_appserver。
警告:删除以前的所有数据
在我的情况下,我有一个播种器文件,然后重新运行它。