0

Google App Engine FlexoでSymfony 3プロジェクトを取得できません。Google Cloud SQL(MySQL、2 Generation)に接続できません。これらの例でGoogle App EngineのSymfony3 FlexibleがGoogle Cloud SQLに接続できませんMySQL

https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/flexible/symfony

https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/flexible/cloudsql-mysql

をオフに開始

は、私はGoogle App EngineとGoogle Cloud SQL(MySQLの、2世代)、ヨーロッパ・west3の両方を作成しました。 GAEでこれらのサンプルをテストしたところ、どちらもうまく動作しました。

その後、私は続けて、非常にシンプルな新しいSymfony 3.3プロジェクトを最初から作成しました。 作成後(ウェルカム画面と「あなたのアプリケーションはすぐに準備完了です:あなたは/ app /」で作業を開始できます)私はそれを私のGAEflexにデプロイしました。

その後、私は単純なエンティティとそのためのコントローラを追加しました。 これはうまくいきます.Googlesのcloud_sql_proxyとSymfonyの組み込みWebサーバー「php bin/console server:run」を起動するときにはうまくいきます。 Cloud SQLとの間で読み書きができます。

私が何を試しても、私はいつも "symfony-scripts" "post-install-cmd"のコマンドのうちの1つ(または私の実験状態に応じて)に "Connection Refused"私の作曲家.json。

"の$のgcloudベータアプリ展開" 出力(抜粋)

... 
Step #1: Install PHP extensions... 
Step #1: Running composer... 
Step #1: Loading composer repositories with package information 
... 
Step #1:  [Doctrine\DBAL\Exception\ConnectionException] 
Step #1:  An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused 
Step #1: 
Step #1: 
Step #1:  [Doctrine\DBAL\Driver\PDOException] 
Step #1:  SQLSTATE[HY000] [2002] Connection refused 
Step #1: 
Step #1: 
Step #1:  [PDOException] 
Step #1:  SQLSTATE[HY000] [2002] Connection refused 
... 

parameters.yml(抜粋)

parameters: 
    database_host: 127.0.0.1 
    database_port: 3306 
    database_name: gae-test-project 
    database_user: root 
    database_password: secretpassword 

config.yml(抜粋)

doctrine: 
    dbal: 
     driver: pdo_mysql 
     host: '%database_host%' 
     port: '%database_port%' 
     unix_socket: '/cloudsql/restof:europe-west3:connectionname' 
     dbname: '%database_name%' 
     user: '%database_user%' 
     password: '%database_password%' 
     charset: utf8mb4 
     default_table_options: 
      charset: utf8mb4 
      collate: utf8mb4_unicode_ci 

作曲。 json(抜粋)

"require": { 
    "php": "^7.1", 
    "doctrine/doctrine-bundle": "^1.6", 
    "doctrine/orm": "^2.5", 
    "incenteev/composer-parameter-handler": "^2.0", 
    "sensio/distribution-bundle": "^5.0.19", 
    "sensio/framework-extra-bundle": "^3.0.2", 
    "sensio/generator-bundle": "^3.0", 
    "symfony/monolog-bundle": "^3.1.0", 
    "symfony/polyfill-apcu": "^1.0", 
    "symfony/swiftmailer-bundle": "^2.3.10", 
    "symfony/symfony": "3.3.*", 
    "twig/twig": "^1.0||^2.0" 
}, 
"require-dev": { 
    "symfony/phpunit-bridge": "^3.0" 
}, 
"scripts": { 
    "symfony-scripts": [ 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 
    ], 
    "post-install-cmd": [ 
     "chmod -R ug+w $APP_DIR/var", 
     "@symfony-scripts" 
    ], 
    "post-update-cmd": [ 
     "@symfony-scripts" 
    ] 
}, 

app.ymlファイル(完了)

service: default 
runtime: php 
env: flex 

runtime_config: 
    document_root: web 

env_variables: 
    SYMFONY_ENV: prod 
    MYSQL_USER: root 
    MYSQL_PASSWORD: secretpassword 
    MYSQL_DSN: mysql:unix_socket=/cloudsql/restof:europe-west3:connectionname;dbname=gae-test-project 
    WHITELIST_FUNCTIONS: libxml_disable_entity_loader 

#[START cloudsql_settings] 
# Use the connection name obtained when configuring your Cloud SQL instance. 
beta_settings: 
    cloud_sql_instances: "restof:europe-west3:connectionname" 
#[END cloudsql_settings] 

は、私が例やドキュメントがに私に助言のみの行を追加または変更されたことに注意してください。

何が間違っていますか? 例はうまくいきますが、動作しているcloud_sql_proxyを通してDBに接続しているSymfonyプロジェクトは正常に動作します。私はdoctrineをGAEflex内からCloudSQLに接続しようとすると接続しません。

私が作ったかもしれないルーキーの間違いは誰にも見えますか? 誰かがこの問題を抱えていましたか、GAEやCloudSQLを使用して設定を忘れてしまったことがありますか? GAEFlexとCloudSQLを使用しているSymfony3/Doctrineプロジェクトのリポジトリに私を指摘できますか?

これを取得する方法、むしろ明白な組み合わせを実行する方法についての最新のドキュメントは見つかりませんでした。 ご迷惑をおかけして申し訳ございません。

乾杯/ Carsten

+0

私はSymfonyに慣れていませんが、config.ymlからホスト/ポート行を削除するとどうなりますか?エラーメッセージ(「Connection refused 」)は、UNIXソケットを使用するのではなく、TCPを介して接続しようとしていることを示しています。 – Vadim

+0

あなたはTCPへの "Connection Refused"ヒントについては正しいですが、 "SQLSTATE [HY000] [2002]そのようなファイルやディレクトリはありません"と言います。今私はこれについて数日間熟考していると言いましたか?私が例を見つけることができなかった後、私は思っていたすべてのことを無理なく試してみました。だから私は誰かが間違いなく私の間違いや作品を指し示すことができるかどうか尋ねたのです。 –

+1

Cloud SQL APIを有効にしたことを再度確認できますか?始める前にここでポイント2を参照してください:https://cloud.google.com/appengine/docs/flexible/php/using-cloud-sql – Vadim

答えて

1

私はそれを見つけました。 私はこのポストFlexible env: post-deploy-cmd from composer.json it not being executedを読んで、興味深い2つの情報を得ました。

  1. PHP用のApp EngineのFlexは、あなたがDB接続を必要としない限り、post-deploy-cmdがこれ以上
  2. ただ、ドロップイン置換としてpost-install-cmdを使用して実行されません。

したがって、展開中には、データベース接続/ソケットが使用できません。 その理由は、残念ながら他の問題を引き起こしたと思われる(標準以外の)post-deploy-cmdをGoogleが導入したためです。バマー。

現時点では、post-install-cmdの中でデータベースを使用するものはなので使用できません。

上記の場合、私はちょうど

composer.json(抜粋)

"scripts": { 
    "symfony-scripts": [ 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 
    ], 
    "pre-install-cmd": [ 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 
    "post-install-cmd": [ 
     "chmod -R ug+w $APP_DIR/var", 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 
    ], 
    "post-update-cmd": [ 
     "@symfony-scripts" 
    ] 
}, 

を変更し、すべてがうまく動作します...

私はinstallAssetsの内臓についてはよく分かりません私がそれをプレインストールに移動するときに元の意図した効果を達成しても、それは非常に簡単なサンプルアプリケーションのために機能します... 次の日には、複雑なアプリケーションと私はそれを働かせることができるかどうかを見てください。

さらなる議論は、最も可能性の高いGoogle Cloud Platform Community

乾杯のみんなでオーバーになります!

関連する問題