Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write to local App Engine datastore with PHP

What is the best way to develop locally in PHP and the Google datastore?

The dev_appserver.py docs say I can view local datastore entities, but there is no documentation on how to connect/write to this local datastore using PHP.

I can write to the local datastore emulator using:

// Start emulator: gcloud beta emulators datastore start --data-dir=_datastore
// Pointing this to dev_appserver's 'API server' doesn't work.
putenv('DATASTORE_EMULATOR_HOST=http://localhost:8081');
$datastore = $cloud->datastore();

But these entities do not show up in dev_appserver.py's local admin server at http://localhost:8000/datastore.

Even setting the dev_appserver's --datastore_path to be equal to the emulator's --data-dir does nothing.

Why are the datastore emulator and dev_appserver.py's datastore different? They share the same name and the docs refer to them interchangeably. This is frustrating.

Is this the correct way to do local datastore development? Is there a way to write to the local datastore and have the entities show up in the admin server viewer?

like image 732
N S Avatar asked May 21 '17 22:05

N S


1 Answers

Google Cloud Datastore Emulator and dev_appserver.py have different underlying storage. So the entities on datastore emulator cannot be shown in the admin server viewer.

see:

  • https://github.com/GoogleCloudPlatform/google-cloud-datastore/issues/21

  • Connecting to AppEngine datastore in development via Cloud Datastore API

There are maybe two way to connect to local datasotre (I'm not tried with php):

  1. Use appengine-php-sdk for standard enviroment, start development server by dev_appserver.py, and view datastore from admin server viewer.

  2. Use google/cloud library for php, and set DATASTORE_EMULATOR_HOST env variable.

Unfortunately there isn't viewer for emulator, so I'm developing cli tool to check datastore entities by GQL: https://github.com/nshmura/dsio

like image 74
nshmura Avatar answered Nov 15 '22 23:11

nshmura