如何为 gcloud 数据存储模拟器设置项目?

How do I set up a project for gcloud datastore emulator?

我正在尝试使用 gcloud sdk 进行一些离线开发,我想在其中构建一个 Python Flask 应用程序来呈现从数据存储区查询的数据。线下做的原因很简单,开发的时候比较快,以后会用App Engine在线部署。

首先:数据存储模拟器是运行。

但是我无法将数据导入数据存储区。我在下面使用 here 来尝试导入(使用我的值)。

curl -X POST localhost:8081/v1/projects/[PROJECT_ID]:import \
-H 'Content-Type: application/json' \
-d '{"input_url":"[ENTITY_EXPORT_FILES]"}'

我遇到的问题是 returns

NOT FOUND

我想我知道它是什么但不知道如何解决它:我的离线环境中没有定义项目。所以我想知道,如何在 "offline cloud SDK environment" 中设置项目?

DataStore 模拟器的 PROJECT_ID 是在安装期间设置的。

我稍微研究了一下,在底部的 link 中您可以看到它是如何完成的。您需要将项目 ID 设置为环境变量,或者使用自动命令为您设置它。

看看here,我想这就是你所缺少的。

希望对您有所帮助。

编辑:

您好,Nelumbo,我认为您之前收到的 NOT FOUND 和 NotFoundHandler 是相同的错误。 Datastore 中的常见错误反映了当请求尝试更新不存在的实体时生成 NOT_FOUND,这意味着它可能是格式错误的地址。

考虑到您的 Datastore 模拟器可以正确启动,这是我第一个想到的可能原因,我们指向错误或格式错误。

如果您完全确定情况并非如此,我假设您尝试了不同的格式并仔细检查。

我还有一些其他的想法,您可以检查这些想法以排除潜在的原因。

  1. 您 运行 是否在与 8081 不同的端口?

  2. 你的cloud sdk组件是什么版本?你最近 updated them 了吗?

您是否尝试过在 curl 中手动传递项目 ID?

此外,我了解到您正在将数据导入数据存储模拟器,并且一切都在本地完成。

告诉我。

EDIT2:

嘿 Nelumbo,我能想​​到的唯一可能影响您或您尝试的不同的事情是我看到安装的配置端口是 8432,导入端口是 8081正如您在 following docs 中看到的那样。当您检查环境变量时,它是 8432 还是 8081?

我建议的另一件事是尝试在云中执行此操作 Shell 以确保它有效,如果它确实向 GCP 团队提出了一个 public 问题跟踪器,因为它可能是Windows 版本有问题。

并且至少尝试将 SDK 版本更新到最新版本可能与此有关。但是,是的,随着如何向模拟器添加项目 ID 的最初问题已经解决,制作一个新的项目 ID 以增加它的可见性可能会有所帮助。