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