【问题标题】:GAE NDB Datastore new feature: Access Datastore entities from other GAE appGAE NDB Datastore 新功能:从其他 GAE 应用程序访问 Datastore 实体
【发布时间】:2016-06-02 03:25:52
【问题描述】:

阅读 GAE NDB Datastore 的新文档: https://cloud.google.com/appengine/docs/python/ndb/modelclass#class_methods

get_by_id(id, parent=None, app=None, namespace=None, **ctx_options)

按 ID 返回一个实体。这实际上只是Key(cls, id).get() 的简写。

参数

id 字符串或整数键 ID。 parent 模型的父键 得到。

app(关键字 arg)应用的 ID。如果未指定,则获取当前数据 应用程序。

namespace(关键字 arg)命名空间。如果未指定,则获取数据 默认命名空间。

**ctx_options 上下文选项返回模型实例,如果未找到则返回 None。

我发现了这个新的app 参数。这是我很久以前就需要的!!!!!!! 我刚刚尝试从应用程序“xxxxxglobal”访问应用程序“xxxxxdev”的数据存储区,但出现此错误:

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1373, in check_rpc_success
    raise _ToDatastoreError(err)
BadRequestError: app s~xxxxxglobal cannot access app xxxxxxdev's data

我在此链接中将帐户服务 xxxxxdev@appspot.gserviceaccount.com 和 xxxxxglobal@appspot.gserviceaccount.com 添加为彼此的管理员: https://console.cloud.google.com/iam-admin/iam/

但我仍然收到问题。

谁能帮帮我?我需要知道我可以在控制面板的哪个位置授予对 App Engine 中其他应用的数据存储区访问权限。

【问题讨论】:

  • 我很想看到这个问题的答案。 Google 服务帐户的内容非常混乱,我没有找到任何好的文档。
  • 可能与这个即将推出的功能有关:code.google.com/p/googleappengine/issues/detail?id=1300
  • 某些东西可能已经在工作了,正如这个答案中所建议的那样:stackoverflow.com/a/25747058/4495081
  • 更令人困惑的是,现在 App Engine 的东西都与云的其余部分纠缠在一起,因此很难找到相关设置。我的预感是,尽管这两个用户对彼此的数据具有管理员访问权限,但还有一些应用级别的权限必须被授予。
  • 没人有这个问题的消息吗?

标签: python google-app-engine google-cloud-datastore


【解决方案1】:

目前,ndb 不使用 Cloud Datastore API,并且在其正常操作模式下无法连接到另一个应用的 Datastore - 它本机连接到运行代码的应用的 Datastore。

但是,您可以使用 remote api 让 ndb 从开发环境连接到不同应用程序的数据存储区。

目前 [Public Issue Tracker for App Engine 中有一个开放的功能请求,用于从单个应用程序访问多个数据存储区的可能性。请随意发布针对 ndb 的功能请求,尽管从 the following comments in the source 看来,这似乎已经在进行中:

 current_app_id = os.environ.get('APPLICATION_ID', None)
  if current_app_id and current_app_id != app_id:
    # TODO(pcostello): We should support this so users can connect to different
    # applications.
    raise ValueError('Cannot create a Cloud Datastore context that connects '
                     'to an application (%s) that differs from the application '
                     'already connected to (%s).' % (app_id, current_app_id))
  os.environ['APPLICATION_ID'] = app_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多