Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BadRequestError:app";dev~myapp";无法访问应用程序“;s~myapp"';s数据_Python_Google App Engine_Jinja2_Wsgi_Webapp2 - Fatal编程技术网

Python BadRequestError:app";dev~myapp";无法访问应用程序“;s~myapp"';s数据

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“

我有一个错误:

BadRequestError:应用程序“dev~myapp”无法访问应用程序“s~myapp”的数据

这是相似的,但是

答案似乎不适用于我的应用程序(甚至试图打开它)-我只有一个应用程序,我没有使用远程API,我没有使用urlsafe密钥,我所有的密钥属性都是
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

警告:删除所有以前的数据

在我的情况下,我有一个播种机文件,只是重新运行它