2016-12-29 15 views
10

コードをデプロイした時点でデータストアに書き込めるようになりましたが、caバンドルエラーが発生したため、コードをローカルに実行してデータストアエミュレータに書き込むことができません。ローカルデータストアはlocalhostで表示されます。8000dev_appserver.pypでローカルgoogle Datastoreを使用

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

を私はローカルサーバものphp.iniファイルを検討するために管理していなかったにも私は、少なくともphp56にバンドルさphp55をアップグレードするために管理しました。 Googleのリモートデータストアに

  1. がどのように適切に接続するためのローカルインスタンス(dev_appserver.py)からWindows上:

    は、このように私は実際に2つの質問がありますか?

  2. localhost:8000のデータを表示できるように、ローカルインスタントからローカルエミュレートされたデータストアに正しく接続するにはどうすればいいですか?
+0

PHPのドキュメント悲惨です。 dev_appserver.pyインスタンスがデータストアエミュレータと通信できるようにしましたか? –

+0

いいえ、面白い事実、https://github.com/tomwalder/php-gdsを使用した後、私はエラーが発生しなくなりました。 –

答えて

1

APIは、認証にCA証明書ファイルを使用しています。具体的には、curl.cainfoを使用しています。

このファイルは、すでにに設定されている可能性があります。php.iniサーバーファイルをチェックインすることができます。 api、cliのような異なる環境に異なるiniファイルが存在する可能性があることを忘れないでください。

今、あなたは、ファイルまたはCreate your own authority file

オプション1というコピーすることができ、次のいずれか
使用ini_setこの設定を設定するには:
は、php.iniの

オプション2で絶対パスを設定します。

オプション3:
他の認証モードを試してみてください。私は確かにGoogleが持っています。

オプション4:
質問自体に記載されています。

あなたが特定の証明書のバンドルを必要としない場合は、Mozillaはここ https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crtダウンロードすることができます一般的に使用されるCAバンドルを提供します。ディスク上にCAバンドルを用意したら、 'openssl.cafile' PHP ini設定をファイルへのパスを指すように設定して、 'verify'リクエストオプションを省略することができます。

関連する問題