2017-06-12 19 views
0

ローカルサーバー(プロキシを使用)からGoogle CloudホストのmySQLデータベースに接続できますが、できませんGoogle App EngineからApp EngineインスタンスとGoogle Cloud mySQLインスタンスは同じ領域にありますが、これは第2世代のMySQLでは問題ではないはずです。App Engineアプリケーション(柔軟な環境)からMySQLの第2世代のインスタンスに接続できませんPHP

ローカルサーバーから、データベースを操作する簡単なコマンドに接続して送信できます。

私はそれが次のコマンドで失敗したGoogle App Engineのためのコード展開:この-DSNは次のように定義されて

$::

$pdo = new PDO($this->dsn, $this->user, $this->password); 

mysql:host=127.0.0.1;port=3306;unix_socket=/cloudsql/<Project ID>:<Location>:<Instance>;dbname=<Database Name>" 

ユーザーとパスワードは、ローカルサーバーからログインしてmySQLデータベースを正常に操作できるように、インスタンス接続名と同様に定義され、検証されます。内部の<>区切り文字は、PHPコードで使用される値の説明です(機密情報を難読化するために置き換えられます)。

私は次のようにこのコマンドから任意の例外をキャッチしようとした:悲しいこと

try { 
    $pdo = new PDO($this->dsn, $this->user, $this->password); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

、私は、Webクライアントに印刷されたすべてのメッセージは、単に一般的なブラウザの例外出力を得ません。 Google App Engineによってインスタンス化されているVMにナビゲートしてsyslogやその他のヒントをデバッグするヒント(Google Cloud)のコードについてのヒントもありがとうございます。

私のapp.yamlは次のようになります。

runtime: php 
env: flex 

runtime_config: 
    document_root: web 

beta_settings: 
    cloud_sql_instances: "<Project ID>:<Location>:<Instance>" 

繰り返しますが、このすべては、クラウドプロキシスクリプトを使用してローカルサーバからうまく動作しますが、Googleクラウドにデプロイするときだけで再生されません。私はphpの本棚のチュートリアルを厳密に守った後、これを実現するためにコードの多くを取り除きました - ローカルサーバでテストすることで常に正気を確認します。

ありがとうございます。

+0

ところで - 私は、VMのインスタンスにログオンすることができていると私は、適切な形式で/ cloudsqlの下に作成されたソケットを参照しています。 syslogは有望ないくつかの "GAE"環境変数を示しています。見つけることができるエラーメッセージはありませんが、私が探しているものはあまり明確ではありません。 –

答えて

0

私はあなたがDSNの次を使用すべきだと思う:

mysql:unix_socket=/cloudsql/<Project ID>:<Location>:<Instance>;dbname=<Database Name> 
+0

ありがとうございます。問題を別の方法で解決しました。私は "標準"のApp Engineフローから始め、このバージョンではmySQLサーバに接続するのに問題はありませんでした。ありがとうございました –

関連する問題