Python 2.7 &引用;“在应用程序上下文之外工作”;在带有Python远程API的Google应用程序引擎中
我在Google App Engine上部署了一个简单的项目,该项目正在那里运行。以前,我可以通过远程API控制台从数据存储中获取用户列表,但现在这已经不起作用了。要启动远程API控制台,我将通过以下方式进行连接(从项目目录运行): 我发现加载所有模块的最简单方法是运行:Python 2.7 &引用;“在应用程序上下文之外工作”;在带有Python远程API的Google应用程序引擎中,python-2.7,google-app-engine,remoteapi,Python 2.7,Google App Engine,Remoteapi,我在Google App Engine上部署了一个简单的项目,该项目正在那里运行。以前,我可以通过远程API控制台从数据存储中获取用户列表,但现在这已经不起作用了。要启动远程API控制台,我将通过以下方式进行连接(从项目目录运行): 我发现加载所有模块的最简单方法是运行: s~project> help() help>modules help>quit 之后,我尝试获取用户列表: s~project> from app.models import User s~proj
s~project> help()
help>modules
help>quit
之后,我尝试获取用户列表:
s~project> from app.models import User
s~project> User.query().fetch()
最后一行的结果如下:
WARNING:root:suspended generator _run_to_list(query.py:964) raised RuntimeError(working outside of application context)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/utils.py", line 142, in positional_wrapper
return wrapped(*args, **kwds)
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/query.py", line 1187, in fetch
return self.fetch_async(limit, **q_options).get_result()
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
self.check_success()
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/query.py", line 964, in _run_to_list
batch = yield rpc
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion
result = rpc.get_result()
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
return self.__get_result_hook(self)
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_query.py", line 3014, in __query_result_hook
self.__results = self._process_results(query_result.result_list())
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_query.py", line 3047, in _process_results
for result in results]
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_rpc.py", line 185, in pb_to_query_result
return self.pb_to_entity(pb)
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/model.py", line 662, in pb_to_entity
entity = modelclass._from_pb(pb, key=key, set_key=False)
File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/model.py", line 3119, in _from_pb
ent = cls()
File "app/models.py", line 68, in __init__
if self.email == current_app.config['MAIL_ADMIN']:
File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/werkzeug/local.py", line 297, in _get_current_object
return self.__local()
File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/flask/globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
警告:root:suspended generator\u run\u to\u list(query.py:964)引发运行时错误(在应用程序上下文之外工作)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/utils.py”,第142行,位置包装
已包装退货(*args,**kwds)
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/query.py”,第1187行,在fetch中
返回self.fetch\u async(限制,**q\u选项)。获取结果()
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/tasklets.py”,第325行,在get\u result中
self.check_success()
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/tasklets.py”,第368行,在“help\u tasklet\u”中
值=发电机推力(exc.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/query.py”,第964行,在“运行到”列表中
批次=成品率
文件“/home/krasen/Programs/+/google\u-appengine\u-PYTHON\u-SDK/google/appengine/ext/ndb/tasklets.py”,第454行,在rpc完成时
result=rpc.get_result()
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/api/apiproxy\u stub\u map.py”,第613行,在get\u result中
返回self.\u获取\u结果\u挂钩(self)
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/datastore/datastore\u query.py”,第3014行,在查询结果钩子中
self.\u results=self.\u process\u results(查询\u result.result\u列表())
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/datastore/datastore\u query.py”,第3047行,在处理结果中
以获取结果]
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/datastore/datastore\u rpc.py”,第185行,在pb\u to\u query\u结果中
将self.pb_返回给_实体(pb)
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/model.py”,第662行,在pb\u to\u实体中
实体=模型类。\来自\u pb(pb,key=key,set\u key=False)
文件“/home/krasen/Programs/+/google\u appengine\u PYTHON\u SDK/google/appengine/ext/ndb/model.py”,第3119行,位于
ent=cls()
文件“app/models.py”,第68行,在__
如果self.email==当前应用程序配置['MAIL\u ADMIN']:
文件“/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site packages/werkzeug/local.py”,第338行,位于__
返回getattr(self.\u get\u current\u object(),name)
文件“/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site packages/werkzeug/local.py”,第297行,在当前对象中
返回self.\uuu local()
文件“/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site packages/flask/globals.py”,第34行,在“查找”应用程序中
引发运行时错误('在应用程序上下文之外工作')
运行时错误:在应用程序上下文之外工作
我对python非常陌生。我发现了,但无法理解如何在应用程序上下文中开始工作
我在linux上尝试了python版本:
- 2.7.6(在干净安装的linux上)
- 2.7.9
- 1.9.17
- 1.9.23
- 1.9.24
- 问题出在用户类本身。我有:
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
# FLASKY_ADMIN configuration variable, so as soon as that email address appears in a registration request it can be given the correct role
if self.role is None:
print ("there is no role for this user")
if self.email == current_app.config['MAIL_ADMIN']:
self.role = ndb.Key('Role', 'administrator')
有问题的一行是这一行:
if self.email == current_app.config['MAIL_ADMIN']:
我不知道如何处理这一行,所以我删除了它,现在检索到了用户。问题出在用户类本身。我有:
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
# FLASKY_ADMIN configuration variable, so as soon as that email address appears in a registration request it can be given the correct role
if self.role is None:
print ("there is no role for this user")
if self.email == current_app.config['MAIL_ADMIN']:
self.role = ndb.Key('Role', 'administrator')
有问题的一行是这一行:
if self.email == current_app.config['MAIL_ADMIN']:
我不知道如何处理这一行,因此我已将其删除,现在用户已被检索。您使用的是哪个版本的SDK?您能否运行?请确保使用?1.9.17、1.9.23、1.9.24(最新版本)。一切都不起作用。我认为这不是来自python SDK,因为一个月前它与1.9.17一起工作可能没有关系,但我已经将我的linux kubuntu升级到plasma 5.2,可能有新的python软件包。您的系统上运行的是什么版本的python?也就是说,
python-V
的输出是什么?krasen@krasen-Lenovo-Y50-70:~$python-V python 2.7.9您正在使用哪个版本的SDK?您能否运行?请确保使用?1.9.17、1.9.23、1.9.24(最新版本)。一切都不起作用。我认为这不是来自python SDK,因为一个月前它与1.9.17一起工作可能没有关系,但我已经将我的linux kubuntu升级到plasma 5.2,可能有新的python软件包。您的系统上运行的是什么版本的python?也就是说,python-V
的输出是什么?krasen@krasen-Lenovo-Y50-70:~$python-V python 2.7.9您解决问题的方式创建了一个新问题,因为您的源代码中现在有管理员凭据。对于解决方案,请参见关于app.app_context()的详细信息:好的,这是一个旧的解决方案,我现在要说的是真正的问题是Flask如何访问某些内容,以及没有Flask context如何无法访问这些内容。我忘记了这个问题,上面的链接是正确的。谢谢您解决问题的方法创建了一个新问题,因为您的源代码中现在有管理员凭据。有关解决方案,请参见app.app\u context()的详细信息。
这里:好的,这是旧的,我现在要说的是真实的