无法从应用引擎

时间:2017-05-14 14:21:25

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

过去2天我一直在尝试从appengine连接到cloudql,我可以通过IP从linux网络服务器连接,但不能从具有相同设置的app引擎连接。

我的连接字符串如下: 请注意实际的appid被替换以及dbname

在app.yaml

env_variables:
  MYSQL_DSN: mysql:unix_socket=/cloudsql/appid:us-central1:sql-instance-1;dbname=dbname
  MYSQL_USER: root
  MYSQL_PASSWORD: ''

在phpfile中

$dsn = getenv('MYSQL_DSN');
$user = getenv('MYSQL_USER');
$password = getenv('MYSQL_PASSWORD');
if (!isset($dsn, $user) || false === $password) {
    throw new Exception('Set MYSQL_DSN, MYSQL_USER, and MYSQL_PASSWORD environment variables');
}
$conn = new PDO($dsn, $user, $password);

上述内容来自https://cloud.google.com/appengine/docs/standard/php/cloud-sql/ 我尝试过使用密码,而不是使用密码。我尝试过用户名root,作为用户名,密码和用户名没有。

我正在使用第二代设置和flex php环境,我一直收到的错误如下:

短错误

SQLSTATE[HY000] [2002] No such file or directory

完整错误

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /app/dbconn.php:12 Stack trace: #0 /app/dbconn.php(12): PDO->__construct('mysql:unix_sock...', 'root', '') #1 /app/api.user.php(2): include_once('/app/dbconn.php') #2 {main} thrown in /app/dbconn.php on line 12

我现在真的没有想法了。请注意,sql和app都在同一个项目中。

1 个答案:

答案 0 :(得分:4)

如果您通过SSH连接实例(这将使其处于调试模式),您可以检查是否存在套接字文件。您可以从云控制台打开连接。

然后,

ls /cloudsql

此目录应包含名为<project-id>:<region>:<instance-name>的项目,跟随您的MYSQL_DSN环境变量。

如果不存在,请确保您启用了相关API 。在文档页面Using Cloud SQL中,按照“开始之前”中的说明进行操作 - 特别是“启用API”。 (您的日志也可能会通知您:“未配置访问权限。项目之前尚未使用Cloud SQL Administration API或已禁用它。”)在重新部署

你可能已经这样做了,但根据我的经验,这是一个容易被忽视的步骤。

此外,确保您的app.yaml文件包含以下内容

beta_settings:
    cloud_sql_instances: "<project-id>:<region>:<instance-name>"

最后,尝试将 MYSQL_DSN的值放在app.yaml文件的引号中