【问题标题】:ENOENT when connecting to Google Cloud SQL from App Engine从 App Engine 连接到 Google Cloud SQL 时 ENOENT
【发布时间】:2017-06-17 16:34:53
【问题描述】:

我正在尝试在 Google App Engine 上部署我的 Node.js 应用程序并且部署良好,但由于某种原因它无法连接到 Google Cloud SQL。这是它抛出的内容:

Error: connect ENOENT /cloudsql/my-project-id:asia-east1:my-sql-instance

这是我配置连接的方式:

if (process.env.INSTANCE_CONNECTION_NAME) {
     exports.mysqlConfig = {
         user: process.env.GCLOUD_SQL_USERNAME,
         password: process.env.GCLOUD_SQL_PASSWORD,
         socketPath: '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME
     }
} else {
    // Use settings for localhost
}

我正在使用node-mysql 模块连接到数据库。

App Engine 和 Cloud SQL 已经在同一个项目中。 我的理论是 App Engine 和 Cloud SQL 必须在同一个项目中同一个区域,但我不确定。

【问题讨论】:

  • 我不知道刚刚发生了什么,但事情会自行解决。我想这与 Google App Engine 的 Node.js 支持仍处于测试阶段有关。
  • 在一些调试或类似的过程中,您有没有机会从您的socketPath 中删除领先的/
  • 我在这里面临同样的问题。它起作用了,现在突然不再起作用了。当我将应用程序引擎的实例 ip 添加到允许的云 sql 网络时,它可以工作。 App Engine 和 Cloud SQL 在同一个项目中。
  • @jimmy,嘿,你是怎么做到的?谢谢!
  • @LeDinhNhatKhanh 也许这有帮助:*.com/questions/45709319/…

标签: mysql node.js google-app-engine


【解决方案1】:

在启动期间检查您的日志是否有任何错误:

  1. 下面的cmdgcloud app logs tail -s default或者,

  2. 使用日志查看器https://console.cloud.google.com/logs/viewer

您可能没有为您的项目启用 Cloud SQL API:https://console.developers.google.com/apis/api/sqladmin/overview

【讨论】:

  • 我忘记了我做了什么,但由于最可能出现的问题是不启用 Cloud SQL API,所以这里给 10 分。
  • 这是我遇到的问题。我很难相信他们在 Google Cloud 文档中没有提到您必须先打开 Cloud SQL API,然后使用 beta_settings 部署您的应用程序: cloud_sql_instances:
  • 谷歌登录concole告诉,如果配置正确,你必须激活SQL Admin API,而文档没有......但你没有说的是API必须是在部署之前激活。如果您看到日志,请在日志条目中给出的 URL 上激活 API,然后重新部署您的应用程序。
【解决方案2】:

确保您在 app.yaml 中添加了以下设置

beta_settings:
  # The connection name of your instance, available by using
  # 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
  # the Instance details page in the Google Cloud Platform Console.
  cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME

参考:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql-postgres

【讨论】:

    【解决方案3】:

    显然你做事的顺序很重要......

    1. 启用 Cloud SQL API
    2. 然后(重新)部署您的应用(gcloud app deploy)

    当我执行 deploy -> create databases -> enable sql ipi 时,我得到了 ENOENT 错误

    【讨论】:

    • 我确认订单很重要。日志告诉我必须激活 API,但不是必须重新部署应用程序。荣誉