3

我正在试验Google App Engine 的灵活 Python 3 环境和 Cloud Datastore。在本地测试时,这(通常)需要在 Gunicorn 之类的东西中运行您的应用程序并从gcloud.datastore. 例如:

import gcloud.datastore as g_datastore
ds = g_datastore.Client(...)
entity = datastore.Entity(key=ds.key(...))
ds.put(entity)

在本地运行时(在开发模式下),实体的状态在运行之间保持不变。我一生都无法弄清楚它们的存储位置或如何清除创建/访问后创建的开发数据存储gcloud.datastore.Client。据我所知,它不使用ndb通过运行时使用的相同位置dev_appserver.py

我试图用这样的东西来解决这个问题(在运行 OS X 时):

$ touch foo
$ GCLOUD_PROJECT=... python .../main.py
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: ...
127.0.0.1 - - [04/Jul/2016 10:36:01] "GET / HTTP/1.1" 200 -
...
^C
$ sudo find /private/tmp /var/db /var/tmp ~/.config/gcloud ~/Library -newer foo
...
# nothing meaningful

我尝试查看源代码,发现一些单元测试清理代码: a) 不是随pip install gcloud; 并且(对我来说更重要)b)没有提供任何关于这些东西实际存储位置的线索。

我什至在 Gunicorn 运行时尝试过这个:

$ sudo lsof | grep -Ei 'python'
# nothing meaningful

gcloud.datastore本地运行时(在开发模式下), foo在运行之间存储其状态的位置?!

4

1 回答 1

5

男孩,我觉得自己很傻!默认情况下,gcloud.datastore连接到...(等待它)... Google Cloud Datastore。真实的。我不知道为什么我期待任何不同。

我没有马上解决这个问题,因为我的本地gcloud配置已经配置为使用我的帐户凭据,并且我GCLOUD_PROJECT在运行本地实例时设置了环境。哎呀!(难怪我在本地磁盘上没有看到任何变化!)

因此,如果您在本地运行“开发”云数据存储,则需要运行数据存储模拟器。这比运行更复杂dev_appserver.py(它几乎会为您处理所有这些;例如,请参阅此工作流,了解如何index.yaml从应用程序的数据存储调用中推断文件的值)。如果您不--data-dir向命令提供选项start,则默认本地存储位置为~/.config/gcloud/emulators/datastore/....

我没有删除问题,而是将其留在这里作为对像我这样的麻木者的警告/解释。

于 2016-07-05T22:39:15.910 回答