Использование локального хранилища Google с помощью dev_appserver.pyp

В настоящий момент я могу писать в хранилище данных, когда я развертываю свой код, но я не могу записать в эмулятор хранилища данных код, запущенный локально, поскольку он выдает ошибку ca-bundle. Локальное хранилище данных видно на локальном хосте: 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);

Этот код запускается без каких-либо проблем при развертывании. Но локально выбрасывает:

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 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

Мне не удалось заставить локальный сервер даже рассмотреть файл php.ini, и мне не удалось обновить связанный php55, по крайней мере, с php56.

Таким образом, у меня действительно есть 2 вопроса:

  • как правильно подключиться из локального экземпляра (dev_appserver.py) к окнам в удаленное хранилище данных Google?
  • как правильно подключиться от локального момента к локальному эмулированному хранилищу данных, чтобы я мог просматривать данные на localhost: 8000?

Ответ 1

API-интерфейсы используют файлы сертификатов CA для аутентификации, более конкретно они используют curl.cainfo.

Теперь у вашего сервера может быть этот файл настроен в php.ini. Вы можете проверить файл сервера. Помните, что могут быть разные файлы ini для разных сред, таких как apache, cli.

Теперь вы можете либо скопировать этот файл, либо Создать свой собственный файл полномочий

Вариант 1:
Установить абсолютный путь в php.ini

Вариант 2:
Используйте ini_set, чтобы установить эту конфигурацию.

Вариант 3:
Попробуйте с другим способом аутентификации, я уверен, что у Google это будет.

Вариант 4:
Как указано в самом вопросе.

Если вам не нужен конкретный комплект сертификатов, Mozilla предоставляет широко распространенный комплект CA, который можно скачать здесь https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. После того, как у вас есть пакет CA, доступный на диске, вы можете установить настройку PHP ini 'openssl.cafile', чтобы указать путь к файлу, что позволяет отказаться от опции запроса "проверить"