Python BadRequestError:app";dev~myapp";无法访问应用程序“;s~myapp"';s数据
我有一个错误: BadRequestError:应用程序“dev~myapp”无法访问应用程序“s~myapp”的数据 这是相似的,但是 答案似乎不适用于我的应用程序(甚至试图打开它)-我只有一个应用程序,我没有使用远程API,我没有使用urlsafe密钥,我所有的密钥属性都是Python BadRequestError:app";dev~myapp";无法访问应用程序“;s~myapp"';s数据,python,google-app-engine,jinja2,wsgi,webapp2,Python,Google App Engine,Jinja2,Wsgi,Webapp2,我有一个错误: BadRequestError:应用程序“dev~myapp”无法访问应用程序“s~myapp”的数据 这是相似的,但是 答案似乎不适用于我的应用程序(甚至试图打开它)-我只有一个应用程序,我没有使用远程API,我没有使用urlsafe密钥,我所有的密钥属性都是db.ReferencePropertys,或者db.ListProperty(db.key)s 错误出现在我尝试渲染的模板的第一行: 顶级模板代码中的文件“/…/template.html”,第1行 {%extends“
db.ReferenceProperty
s,或者db.ListProperty(db.key)
s
错误出现在我尝试渲染的模板的第一行:
顶级模板代码中的文件“/…/template.html”,第1行
{%extends“page.html”%}
如果我注释掉该行,则会出现错误:
顶级模板代码中的文件“/…/template.html”,第1行
这向我暗示了错误是在应用模板魔术之前,用Jinja实际加载模板
template.html
是用实体列表变量呈现的(不是Query
对象,而是[e代表queryObject中的e]
s)。如果我用一个空列表替换它们,页面将呈现良好效果
我的dev服务器的数据存储区由生产服务器的备份填充,但到目前为止,我在访问这些条目时还没有遇到问题。我得到的实体列表如下:
@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 fine渲染之前,我可以使用日志记录打印结果。在交互控制台中也很好
为什么这会成为访问另一个应用程序数据的尝试,并在Jinja呈现时引发此异常?我发现原因-db.ListProperty(db.Key)
s的形式如下:
[datastore_types.Key.from_path(u'ModelName', IDnumL, _app=u's~myapp')]
这是使用on-gist从生产服务器备份导入到dev服务器的
不幸的是,正如我之前抱怨的那样,dev服务器不允许编辑db.ListProperty
s(以及一些其他类型)
我的解决方案是在交互式控制台中执行以下操作:
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()
我在重新启动计算机后发生了这种情况。appserver产生了相同的错误,因为它无法连接到我的数据存储仿真程序的本地_db.bin。启动时,数据存储仿真程序还返回
严重:找不到备份存储区/path/.config/gcloud/emulators/datastore/WEB-INF/appengine-generated/local_db.bin
因此,我重命名了local_db.bin并重新运行emulator和dev_appserver
警告:删除所有以前的数据
在我的情况下,我有一个播种机文件,只是重新运行它