php - Usando el almacén de datos de Google local con dev_appserver.pyp
google-app-engine google-cloud-datastore (1)
Por el momento, puedo escribir en el almacén de datos una vez que despliegue mi código, pero no puedo escribir en el emulador del almacén de datos con un código que se ejecuta localmente, ya que arroja un error de paquete ca. El almacén de datos local es visible en localhost: 8000
use google/appengine/api/users/User;
use google/appengine/api/users/UserService;
use google/appengine/api/app_identity/AppIdentityService;
echo AppIdentityService::getApplicationId()."<br>";
echo AppIdentityService::getDefaultVersionHostname()."<br>";
# Includes the autoloader for libraries installed with composer
require __DIR__ . ''/vendor/autoload.php'';
use Google/Cloud/ServiceBuilder;
$cloud = new ServiceBuilder([
''projectId'' => AppIdentityService::getApplicationId(),
''keyFilePath''=>''review-9504000716d8.json''
]);
$datastore = $cloud->datastore();
# The kind for the new entity
$kind = ''Task'';
# The name/ID for the new entity
$name = ''sampletask1'';
# The Cloud Datastore key for the new entity
$taskKey = $datastore->key($kind, $name);
# Prepares the new entity
$task = $datastore->entity($taskKey, [''description'' => ''Buy milk'']);
# Saves the entity
$datastore->upsert($task);
Este código se ejecuta sin problemas cuando se implementa. Pero localmente arroja:
Fatal error: Uncaught exception ''Google/Cloud/Exception/ServiceException'' with message ''No system CA bundle could be found in any of the the common system locations. PHP versions earlier than 5.6 are not properly configured to use the system''s CA bundle by default. In order to verify peer certificates, you will need to supply the path on disk to a certificate bundle to the ''verify'' request option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not need a specific certificate bundle, then Mozilla provides a commonly used CA bundle which can be downloaded here (provided by the maintainer of cURL): https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once you have a CA bundle available on disk, you can set the ''openssl.cafile'' PHP ini setting to point to the path to the file, allowing you to omit the ''verify'' request option. See http://curl.haxx.se/docs/sslcerts.html for more information.'' in D:/Google/php/appengine-php-guestbook-phase0-helloworld/appengine-php-guestbook-phase0-hellowo in D:/Google/php/appengine-php-guestbook-phase0-helloworld/appengine-php-guestbook-phase0-helloworld/vendor/google/cloud/src/RequestWrapper.php on line 219
No logré hacer que el servidor local siquiera considerara el archivo php.ini ni logré actualizar el paquete php55 al menos a php56.
Por lo tanto, en realidad tengo 2 preguntas:
- cómo conectarse correctamente desde la instancia local (dev_appserver.py) en Windows al almacén de datos remoto de Google?
- cómo conectar correctamente desde el instante local al almacén de datos emulado local para que pueda ver los datos en localhost: 8000?
Las API están utilizando archivos de certificado de CA para la autenticación, más específicamente están usando curl.cainfo
.
Ahora su servidor podría tener este archivo configurado en php.ini . Puede verificar el archivo del servidor. Recuerde que podría haber diferentes archivos ini para diferentes entornos como apache, cli.
Ahora puede copiar ese archivo o Crear su propio archivo de autoridad
Opción 1:
Establecer ruta absoluta en php.ini
Opcion 2:
Use ini_set
para establecer esta configuración.
Opción 3:
Prueba con otro modo de autenticación, estoy seguro de que Google lo tendrá.
Opción 4:
Como se da en tu pregunta en sí.
Si no necesita un paquete de certificados específico, Mozilla proporciona un paquete de CA comúnmente utilizado que se puede descargar aquí https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt . Una vez que tiene un paquete de CA disponible en el disco, puede establecer la configuración ini de PHP ''openssl.cafile'' para apuntar a la ruta del archivo, lo que le permite omitir la opción de solicitud ''verificar''