【问题标题】:Node.JS on Google App Enging with Cloud SQLError: connect ENOENT /cloudsql/Google App Engine 上的 Node.JS 出现 Cloud SQL 错误:连接 ENOENT /cloud sql/
【发布时间】:2018-11-20 07:43:42
【问题描述】:

我已成功将我的应用部署到 Google App Engine。我的数据库已在 Cloud SQL 上启动并运行。通过在云 SQL 中的授权网络上将我的开发机器的 IP 列入白名单,我可以从我的本地机器连接到数据库没有问题。但是,当我部署到生产环境时,我得到:

Error: connect ENOENT /cloudsql/<my project id>:asia-south1:<my database instance name>

我的 app.yaml 文件如下所示:

runtime: nodejs  
env: flex

manual_scaling:  
  instances: 1
resources:  
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

env_variables:
  ST_ENV: 'Production' //Used to set the app listening on the below port
  ST_PORT: '8080'
  SQL_USER: '<username>'
  SQL_PASSWORD: '<password>'
  SQL_DATABASE: '<databasename>'
  INSTANCE_CONNECTION_NAME: '/cloudsql/<my project id>:asia-south1:<my database instance name>'

  beta_settings:
  cloud_sql_instances: '<my project id>:asia-south1:<my database instance name>'

我的配置文件如下所示:

database: {             
            connectionLimit: 10,
            // host     : process.env.INSTANCE_CONNECTION_NAME,
            socketPath: process.env.INSTANCE_CONNECTION_NAME,
            user     : process.env.SQL_USER,  
            password : process.env.SQL_PASSWORD,  
            database : process.env.SQL_DATABASE,
            multipleStatements : true

        }

我正在创建一个连接池(我已经简化了此示例的代码):

var db = config.production.database;
var pool = mysql.createPool(db);

我已经能够通过本地 cloud_sql_proxy 从本地计算机成功连接。

我尝试使用 Cloud SQL 实例的 IP 作为主机,但出现以下错误:

Error: connect ECONNREFUSED 127.0.0.1:3306'

我还尝试将主机指定为 0.0.0.0 和端口 3306 并得到:

Error: connect ECONNREFUSED 0.0.0.0:3306'

编辑:Cloud SQL 和 Cloud SQL Admin API 均已启用:

这就像应用引擎在推送到生产环境时尝试使用不存在的代理一样。有人可以帮忙吗?

【问题讨论】:

  • 您是否在控制台中启用了 Cloud SQL API?
  • 是的。我正在编辑我的问题以包含屏幕截图。
  • 在您的 env_variables 中,尝试从 INSTANCE_CONNECTION_NAME 变量的前面删除“/cloudsql/”
  • 我在我的应用引擎实例上安装了(也许这很愚蠢)代理,现在所有错误都来自我的应用引擎日志。我删除了 /cloudsql/ 并且无论是否接收:textPayload:“错误:在 TCPConnectWrap.afterConnect [as oncomplete] (net.js:1113:14) 处连接 ECONNREFUSED 127.0.0.1:3306 [as oncomplete] (net.js:1113:14)
  • 没必要。我建议尝试让samples 中提供的 server.js 示例正常工作,然后进行增量调整

标签: node.js google-app-engine google-cloud-sql


【解决方案1】:

看看connecting from the Node.js runtime on App Engine Flexible的具体说明。您可以使用实例连接名称和其他一些环境变量来配置连接。无需提供主机名或在您的实例上安装 SQL 代理。正在尝试连接 Cloud SQL 实例的公网 IP won't work from App Engine

【讨论】:

  • 所以有几个问题。 1:有一些非常激进的缓存正在进行,所以即使在重新部署我的应用程序后,我在访问我的页面时也会收到一个缓存错误,这让我失望(可以通过隐身来解决)。 2:我还使用我的数据库来保存会话状态,并且会话管理器与使用开发凭据的数据库有单独的连接。实际上,我的主连接配置正确,并且连接正常。所以我会奖励 50 个代表,因为无论如何我都会失去它..
最近更新 更多