Да, это возможно, но вам нужно тщательно его настроить.
Первое, что нужно иметь в виду, это то, что только один процесс эмуляции (будь то сам эмулятор или сервер разработки) должен обрабатыватьВ некоторых каталогах эмуляции хранилища данных одновременное выполнение нескольких из них, скорее всего, приведет к повреждению данных, как вы, возможно, заметили, пытаясь запустить 2 сервера разработки, использующих один и тот же --datastore_path
конфиг.эмулятор процесса обработки хранения dir.Вы не хотите, чтобы сервер (-ы) разработки, которые также могут или имеют собственную эмуляцию хранилища данных, но в автономном режиме, также обрабатывали этот каталог хранилища, поэтому вам не следует использовать для них параметр --datastore_path
.Серверы разработки должны вместо этого просто общаться с процессом эмулятора хранилища данных для всех своих обращений к хранилищу данных.
Когда вы запустите процесс эмулятора хранилища данных, в его журнале вы увидите строку, определяющую переменную среды DATASTORE_EMULATOR_HOST
что вам нужно передать всем серверам разработки, которым вы хотите предоставить общий доступ к этому экземпляру эмуляции хранилища данных:
[datastore] API endpoint: http://0.0.0.0:5555
[datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
[datastore]
[datastore] export DATASTORE_EMULATOR_HOST=0.0.0.0:5555
[datastore]
[datastore] Dev App Server is now running.
Итак, установите эту переменную среды в оболочке (ях), где вы хотите запустить сервер (ы) разработки), затем запустите серверы только с этими опциями, связанными с хранилищем данных:
export DATASTORE_EMULATOR_HOST=0.0.0.0:555
[.../]dev_appserver.py --support_datastore_emulator=true ...
Этот env var - единственное, что вам не нужно для запуска gcloud beta emulators datastore env-init
здесь, в журнале сервера вы должны увидетьстрока, подобная этой:
ПРЕДУПРЕЖДЕНИЕ 2018-06-14 13: 54: 41,238 api_server.py:581] Обнаруженная переменная среды DATASTORE_EMULATOR_HOST = 0.0.0.0: 5555, dev_appserver будет говорить с запущенным эмулятором Cloud Datastoreпо этому адресу.Datastore_path /some_path_you_may_have_used_before/datastore.db будет игнорироваться.Если вы хотите, чтобы хранилище данных сохранялось в /some_path_you_may_have_used_before/datastore.db, удалите DATASTORE_EMULATOR_HOST из переменных среды и перезапустите dev_appserver
Когда сервер разработки сделает первый доступ к хранилищу данных, вы увидите несколько записей в данных.Журнал эмулятора, например:
[datastore] Jun 14, 2018 10:02:53 AM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
[datastore] INFO: Adding handler(s) to newly registered Channel.
[datastore] Jun 14, 2018 10:02:53 AM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[datastore] INFO: Detected HTTP/2 connection.
Если DATASTORE_EMULATOR_HOST
не указывает на работающий процесс эмулятора хранилища данных (или что-то не так с его связью), вы увидите ошибки на сервере разработкижурналы, вероятно, аналогичные этим:
ERROR 2018-06-14 14:39:08,026 api_server.py:373] Exception while handling datastore_v3.Get()
Traceback (most recent call last):
File "/home/usr_local/google-cloud-sdk-204.0.0/platform/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 333, in _handle_POST
response = service_stub.MakeSyncCallForRemoteApi(request)
File "/home/usr_local/google-cloud-sdk-204.0.0/platform/google_appengine/google/appengine/tools/devappserver2/datastore_grpc_stub.py", line 190, in MakeSyncCallForRemoteApi
request_pb, _TIMEOUT)
File "/home/usr_local/google-cloud-sdk-204.0.0/platform/google_appengine/lib/grpcio-1.9.1/grpc/_channel.py", line 487, in __call__
return _end_unary_response_blocking(state, call, False, deadline)
File "/home/usr_local/google-cloud-sdk-204.0.0/platform/google_appengine/lib/grpcio-1.9.1/grpc/_channel.py", line 437, in _end_unary_response_blocking
raise _Rendezvous(state, None, None, deadline)
_Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, Connect Failed)>
Более подробная информация по адресу:
ПРИМЕЧАНИЕ: что (по крайней мере, в настоящее время) только сервер разработки Google Cloud SDK (последняя версия, которую я тестировал с 204.0.0
)поддерживает общение с автономным эмулятором хранилища данных, SDK, специфичный для GAE, не поддерживает (или, по крайней мере, 1.9.69
python, который я сейчас использую, делаетesn't).От Миграция до эмулятора облачного хранилища данных :
Примечание: Для этой миграции требуется использовать Google Cloud SDK на основе инструментов .