【发布时间】: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