将 google 云数据存储模拟器与 dev_appserver 结合使用

Using google cloud datastore emulator with dev_appserver

我一直在阅读字里行间的内容,并尝试将 dev_appserver.py 与新的 'non-legacy' google 云数据存储模拟器连接。

我的主要动机是在本地机器上开发时将我的应用程序引擎项目与我的 google 云数据流管道集成。

据我了解,这是设置集成的过程:

然而,当我导航到 url 时,这并没有那么顺利,我得到:

BadArgumentError: Could not import googledatastore.
This library must be installed with version >= 4.0.0.b1 to use the Cloud Datastore 
API.

这很奇怪,因为如果我打开 python shell 和 运行 import googledatastore 不会发生错误。

如果我深入挖掘并检测 dev_appserver 中的导入代码并记录错误 here 我得到以下回溯:

Traceback (most recent call last):
  File "/usr/local/google-cloud-sdk/platform/google_appengine/google/appengine/datastore/datastore_pbs.py", line 52, in <module>
    import googledatastore
  File "/Library/Python/2.7/site-packages/googledatastore/__init__.py", line 21, in <module>
    from . import helper
  File "/Library/Python/2.7/site-packages/googledatastore/helper.py", line 25, in <module>
    from google.datastore.v1beta3 import entity_pb2
ImportError: No module named datastore.v1beta3 

我在常规 python shell.

中导入 google.datastore.v1beta3 也没有问题

如果我 运行 PYTHONINSPECT=x dev_appserver.py app.yaml 并退出 shell 执行这些导入 运行 没有错误,那就更奇怪了。也许在 dev_appserver.py 开始时 python 路径发生了一些奇怪的事情?

谁能告诉我如何使用此功能?

更新:我在 ubuntu 14.04(系统 python 2.7.6,pip 8.1.2 via easy_install,gcloud-sdk 118.0.0,app-engine 上重现了这个问题-python 1.9.38) 以及 OS X(gcloud sdk 114.0.0,app-engine-python 1.9.38,系统 python 2.7.10)。

实际上 gcloud datastore emulator 和 dev_appserver 指向两个不同的端点。 localhost:8000 是默认的 dev_appserver 管理控制台,而数据存储模拟器有一个不同的控制台 url,它可以在启动时的打印输出中找到。

我假设您正在访问的管理控制台属于 dev_appserver,那么问题应该在 dev_appserver 内。您可以使用 dev_appserver 中的数据存储区 api 附上代码片段(如果有的话)吗?顺便说一句,它应该是 gcloud.datastore 而不是 appengine.ext.(n)db 与 gcloud datastore-emulator 交谈。

此外,我很好奇如果您不使用“--no-legacy”启动 datastore-emulator,或者甚至不启动 datastore-emulator 而只是启动,会发生什么情况 dev_appserver?

我们最近 运行 遇到了同样的问题。要看的一件事是命令的输出:

(gcloud beta emulators datastore env-init --no-legacy)

我们遇到的问题是,当我们 运行 模拟器时,模拟器正在选择端口 8607,但 env-init 方法返回不同的端口 8328。

所以,我建议启动模拟器并查看它是什么端口 运行 on:

[datastore] Aug 04, 2016 3:50:50 PM com.google.appengine.tools.development.AbstractModule startup
[datastore] INFO: Module instance default is running at http://localhost:8607/
[datastore] Aug 04, 2016 3:50:50 PM com.google.appengine.tools.development.AbstractModule startup
[datastore] INFO: The admin console is running at http://localhost:8607/_ah/admin

在本例中为 8607,然后启动 env-init 方法以获取语法但验证端口。在我们使用上述服务器的情况下 运行 env-init returns 8328

$ (gcloud beta emulators datastore env-init)
export DATASTORE_DATASET=my-app
export DATASTORE_EMULATOR_HOST_PATH=localhost:8328/datastore
export DATASTORE_EMULATOR_HOST=localhost:8328
export DATASTORE_HOST=http://localhost:8328
export DATASTORE_PROJECT_ID=my-app

因此将其更改为正确的端口:

export DATASTORE_DATASET=my-app
export DATASTORE_EMULATOR_HOST_PATH=localhost:8607/datastore
export DATASTORE_EMULATOR_HOST=localhost:8607
export DATASTORE_HOST=http://localhost:8607
export DATASTORE_PROJECT_ID=my-app

然后在您的项目 运行 中使用它,您应该可以开始了。这就是为我们修复它的原因。希望对您有所帮助!

各位注意,

现在可以使用 google 云数据存储模拟器和 dev_appserver! (link)

更新 Google Cloud SDK,然后 运行 dev_appserver 使用“----support_datastore_emulator”。

此功能处于测试阶段,欢迎试用!我们正在积极收集反馈。