3

Я экспериментирую с Google App Engine's flexible Python 3 environment and Cloud Datastore. При тестировании локально это (обычно) требует запуска вашего приложения в чем-то вроде Gunicorn и доступа к API-интерфейсу хранилища данных от gcloud.datastore. Например:Где `gcloud.datastore` сохраняют свое локальное состояние dev и как его очистить?

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 

Я попытался, глядя на исходный код, и нашел some unit test cleanup code что: а) не распространяется с pip install gcloud; и (что более важно для меня) b) не дает никакого представления о том, где это вещество фактически хранится.

Я даже попытался это в то время как Gunicorn бегала:

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

Где Foo делает gcloud.datastore магазин свое состояние между запусками при запуске локально (в режиме разработчика) ?!

+0

Возможно, вы захотите прочитать этот ответ, который поможет в настройке gcloud очень детально для appengine. http://stackoverflow.com/a/28095663/1059396 – minocha

+0

Я не думаю, что это помогает мне. 'dev_appserver.py' несовместим с гибкой средой Python (особенно Python 3). – posita

ответ

4

Мальчик, я чувствую себя глупо! По умолчанию gcloud.datastore подключается к ... (дождитесь его) ... Хранилище Google Cloud. Настоящий. Я не знаю, почему я ожидал другого.

Я не понял это сразу, потому что моя локальная конфигурация gcloud уже была предоставлена ​​для использования учетных данных моей учетной записи, и я установил среду GCLOUD_PROJECT при запуске моего локального экземпляра. Упс! (Не удивительно, что я не видел никаких изменений на локальном диске!)

Итак, если вы хотите иметь «Dev» Облако Datastore работает локально, вам нужно запустить Datastore emulator. Это сложнее, чем запуск dev_appserver.py (который в значительной степени заботится обо всем этом для вас, см., Например, this workflow, как вывести значения для вашего index.yaml файла из вызовов Datastore вашего приложения). Если вы не задаете --data-dir параметр start, то локальное хранилище по умолчанию - ~/.config/gcloud/emulators/datastore/....

Вместо того, чтобы удалять вопрос, я оставляю его здесь как предупреждение/объяснение numbskulls, как я.

+1

Я не думаю, что это глупый вопрос. Официальная документация не очень ясна об этом, и неудивительно, что разработчики испытывают смущение. – diogovk

Смежные вопросы