【问题标题】:Unable to connect to a MySQL Second Generation instance from an App Engine application (flexible environment) PHP无法从 App Engine 应用程序(灵活环境)PHP 连接到 MySQL 第二代实例
【发布时间】:2017-06-12 23:03:54
【问题描述】:

我能够从本地服务器(使用代理)连接到 Google Cloud 托管的 mySQL 数据库,但我无法从 Google App Engine 进行连接。 App Engine 实例和 Google Cloud mySQL 实例位于同一区域,但我已经阅读过,这对于第二代 MySQL 来说应该不是任何问题。

我可以从本地服务器连接并发送一个简单的命令来操作数据库。

当我将代码部署到 Google App Engine 时,它​​会在以下命令中失败:

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

地点:

$this-dsn 定义为:

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 Cloud 时无法播放。我密切关注 php bookshelf 教程,然后删除了大部分代码以实现这一目标 - 始终通过在本地服务器上进行测试来验证其完整性。

谢谢。

【问题讨论】:

  • BTW - 我能够登录到 VM 的一个实例,我确实看到在 /cloudsql 下创建了一个格式正确的套接字。系统日志显示了几个看起来很有希望的“GAE”环境变量。我找不到任何错误消息,但我不太清楚我在寻找什么。

标签: php mysql google-app-engine pdo


【解决方案1】:

我认为您应该对 dsn 使用以下内容:

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

【讨论】:

  • 谢谢。我以不同的方式解决了这个问题。我从“标准”App Engine 流程重新开始,使用此版本连接到 mySQL 服务器没有问题。谢谢
猜你喜欢
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2020-11-23
  • 2021-10-11
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多