【问题标题】:App Engine (PHP) connection to Cloud SQL failedApp Engine (PHP) 与 Cloud SQL 的连接失败
【发布时间】:2018-07-11 14:32:36
【问题描述】:

我使用 google 的“hello world”应用引擎示例的环境来创建我自己的 php 应用。然后我将现有的 app.yaml 文件配置为:

runtime: php55
api_version: 1

handlers:
- url: /
  script: index.php

env_variables:
    MYSQL_DSN: mysql:dbname=sampledb;unix_socket=/cloudsql/sampleproject:europe-west3:sampleinstance
    MYSQL_USER: root
    MYSQL_PASSWORD: admin

我的 index.php 是一个典型的登录页面。我想从我的云 sql 中加载用户数据来检查是否允许用户进入下一页。下一页是包含公司数据的仪表板。我还想从我的云 sql 数据库中加载这些数据。

这是我读取数据的 php 代码(我从谷歌书架教程中复制了它,因为我对这些东西完全陌生..)

  <?php
    $dsn = getenv('MYSQL_DSN');
    $user = getenv('MYSQL_USER');
    $password = getenv('MYSQL_PASSWORD');
    if (!isset($dsn; $user) || false=== $password) {
      throw new Exception('Set MYSQL_DSN');
      }
    $db = new PDO($dsn, $user, $password);

    $statement = $db->prepare("SELECT clicks from display_inbox");
    $statement->execute();
    $all = $statement->fetchAll();

    foreach ($all as $data) {
      echo $data["clicks"], "<br>";
    }
  ?>

这不是一个特定的查询,我只是想检查连接。 部署我的应用程序后,我得到以下结果:

HTTP-500 错误:sampleproject.appspot.com 当前无法处理此请求。

我根本不知道它是我的 app.yaml 还是我的 php 代码。如果有人有 app.yaml 文件的示例代码和读取云 sql 数据的典型查询,那将非常有帮助。

【问题讨论】:

  • 您能否通过添加部署后收到的确切错误来编辑您的帖子?
  • 顺便说一句:我验证了我的 ip 并激活了所有 API
  • 关注 this example,这正是 App Engine Flexible php - CloudSQL。你有一个app.yaml 和一个有效的查询。您是否在收到 500 错误后立即运行命令 gcloud app deploy [YAML FILE]?或者部署成功,但是当您对应用程序执行 HTTP 请求时,它会响应 500(一直)?
  • 我按照示例并尝试部署示例应用程序。但它仍然无法正常工作.. 我可以部署应用程序,但是当我执行 http 请求时,它会响应 500..
  • 您确定标题方向错误吗?您怎么知道是与 Cloud SQL 的连接失败了?您拥有的唯一信息是HTTP-500 error: sampleproject.appspot.com is currently unable to handle this request。你能分享来自Stackdriver logging 的日志条目吗?反映失败请求的一种。

标签: php mysql google-app-engine google-cloud-platform google-cloud-sql


【解决方案1】:

您的 app.yaml 和 index.php 文件中有一些语法错误

试试这个:

app.yaml:

runtime: php55
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: index.php

# [START env]    
env_variables:
    MYSQL_DSN: mysql:unix_socket=/cloudsql/sampleproject:europe-west3:sampleinstance;dbname=sampledb
    MYSQL_USER: root
    MYSQL_PASSWORD: admin
# [END env]

index.php:

  <?php
    $dsn = getenv('MYSQL_DSN');
    $user = getenv('MYSQL_USER');
    $password = getenv('MYSQL_PASSWORD');
    if (!isset($dsn, $user) || false === $password) {
      throw new Exception('Set MYSQL_DSN');
      }
    $db = new PDO($dsn, $user, $password);

    $statement = $db->prepare("SELECT clicks from display_inbox");
    $statement->execute();
    $all = $statement->fetchAll();

    foreach ($all as $data) {
      echo $data["clicks"]."<br>";
    }
  ?>

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2021-07-23
    • 2018-11-05
    • 2014-07-19
    • 2020-06-07
    • 2021-10-24
    • 2014-01-20
    • 2017-12-05
    • 2021-08-04
    相关资源
    最近更新 更多