`gcloud.datastore` 在哪里保留其本地开发状态,我该如何清除它?
Where does `gcloud.datastore` persist its local dev state, and how do I clear it?
我正在试验 Google App Engine's flexible Python 3 environment and Cloud Datastore。在本地测试时,这(通常)要求 运行 在 Gunicorn 之类的东西中安装您的应用程序并从 gcloud.datastore
访问数据存储区 API。例如:
import gcloud.datastore as g_datastore
ds = g_datastore.Client(...)
entity = datastore.Entity(key=ds.key(...))
ds.put(entity)
当 运行 在本地(在开发模式下)时,实体的状态在 运行 之间持续存在。我一辈子都弄不清楚它们的存储位置或如何清除在 creating/accessing gcloud.datastore.Client
之后创建的开发数据存储。据我所知,它使用的地方与 ndb
在 运行 通过 dev_appserver.py
时使用的地方不同。
我试过用这样的方法来解决(当 运行ning 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
我尝试查看源代码,发现 some unit test cleanup code:a) 未随 pip install gcloud
分发;并且(对我来说更重要)b) 没有给出任何关于这些东西实际存储在哪里的线索。
我什至在 Gunicorn 运行ning:
时尝试过这个
$ sudo lsof | grep -Ei 'python'
# nothing meaningful
当 运行 在本地(在开发模式下)时,foo gcloud.datastore
在 运行 之间存储其状态的位置?!
天哪,我觉得我很傻!默认情况下,gcloud.datastore
连接到...(等待)... Google 云数据存储。真实的。我不知道为什么我期望有任何不同。
我没有立即解决这个问题,因为我的本地 gcloud
配置已经配置为使用我的帐户凭据,并且我在 运行ning 时设置了 GCLOUD_PROJECT
环境我的本地实例。哎呀! (难怪我在本地磁盘上没有看到任何变化!)
因此,如果您想要在本地拥有一个"dev"云数据存储运行,您需要运行Datastore emulator. This is more complicated than running dev_appserver.py
(which pretty much takes care of all this for you; see, e.g., this workflow 以了解如何从应用的数据存储区调用中推断 index.yaml
文件的值)。如果不为 start
命令提供 --data-dir
选项,则默认本地存储位置为 ~/.config/gcloud/emulators/datastore/...
.
我没有删除这个问题,而是把它留在这里作为 warning/explanation 给像我这样的笨蛋。
我正在试验 Google App Engine's flexible Python 3 environment and Cloud Datastore。在本地测试时,这(通常)要求 运行 在 Gunicorn 之类的东西中安装您的应用程序并从 gcloud.datastore
访问数据存储区 API。例如:
import gcloud.datastore as g_datastore
ds = g_datastore.Client(...)
entity = datastore.Entity(key=ds.key(...))
ds.put(entity)
当 运行 在本地(在开发模式下)时,实体的状态在 运行 之间持续存在。我一辈子都弄不清楚它们的存储位置或如何清除在 creating/accessing gcloud.datastore.Client
之后创建的开发数据存储。据我所知,它使用的地方与 ndb
在 运行 通过 dev_appserver.py
时使用的地方不同。
我试过用这样的方法来解决(当 运行ning 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
我尝试查看源代码,发现 some unit test cleanup code:a) 未随 pip install gcloud
分发;并且(对我来说更重要)b) 没有给出任何关于这些东西实际存储在哪里的线索。
我什至在 Gunicorn 运行ning:
时尝试过这个$ sudo lsof | grep -Ei 'python'
# nothing meaningful
当 运行 在本地(在开发模式下)时,foo gcloud.datastore
在 运行 之间存储其状态的位置?!
天哪,我觉得我很傻!默认情况下,gcloud.datastore
连接到...(等待)... Google 云数据存储。真实的。我不知道为什么我期望有任何不同。
我没有立即解决这个问题,因为我的本地 gcloud
配置已经配置为使用我的帐户凭据,并且我在 运行ning 时设置了 GCLOUD_PROJECT
环境我的本地实例。哎呀! (难怪我在本地磁盘上没有看到任何变化!)
因此,如果您想要在本地拥有一个"dev"云数据存储运行,您需要运行Datastore emulator. This is more complicated than running dev_appserver.py
(which pretty much takes care of all this for you; see, e.g., this workflow 以了解如何从应用的数据存储区调用中推断 index.yaml
文件的值)。如果不为 start
命令提供 --data-dir
选项,则默认本地存储位置为 ~/.config/gcloud/emulators/datastore/...
.
我没有删除这个问题,而是把它留在这里作为 warning/explanation 给像我这样的笨蛋。