【发布时间】:2018-12-15 19:06:35
【问题描述】:
我正在使用来自 Google Cloud 的 App Engine 和 Cloud SQL。 它们都在同一个项目中,应该足以能够连接到 SQL。
如果您的 App Engine 应用程序与您的云在同一个项目中 SQL 实例,您可以跳过此部分并转到设置您的 当地环境。否则,继续下一步。
如果我在本地启动 Mac 上的 Node.js - 它可以轻松连接到 Cloud SQL,因为我的 IP 地址已列入白名单。
我将它部署到 App Engine 后,它就无法正常工作,因为它无法连接到数据库。我正在为 Cloud SQL 使用公共 IP 地址。
我已经阅读了很多教程,也阅读了 Google Cloud 提供的文档。我可以看到socketPath 有一些东西。
但我不想使用 Knex。我想用标准的mysql。
我一直在尝试以下方法:
var db_config = {
host: 'PUBLIC IP',
user: 'root',
password: 'PASSWORD!',
database: 'DB_NAME',
socketPath: '/cloudsql/CONNECTION_NAME'
};
错误:
error when connecting to db: { Error: connect ENOENT /cloudsql/CONNECTION_NAME-209415:europe-west1:DB_NAME
at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1174:14)
--------------------
at Protocol._enqueue (/Users/root/API/Node-API/node_modules/mysql/lib/protocol/Protocol.js:145:48)
at Protocol.handshake (/Users/root/API/Node-API/node_modules/mysql/lib/protocol/Protocol.js:52:23)
at Connection.connect (/Users/root/API/Node-API/node_modules/mysql/lib/Connection.js:130:18)
at handleDisconnect (/Users/root/API/Node-API/src/App.ts:44:14)
at Object.<anonymous> (/Users/root/API/Node-API/src/App.ts:60:1)
at Module._compile (internal/modules/cjs/loader.js:654:30)
at Module.m._compile (/Users/root/API/Node-API/node_modules/ts-node/src/index.ts:435:23)
at Module._extensions..js (internal/modules/cjs/loader.js:665:10)
at Object.require.extensions.(anonymous function) [as .ts] (/Users/root/API/Node-API/node_modules/ts-node/src/index.ts:438:12)
at Module.load (internal/modules/cjs/loader.js:566:32)
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'connect',
address: '/cloudsql/CONNECTION_NAME-209415:europe-west1:DB_NAME',
fatal: true }
任何建议,如何解决这个问题?如果我从 db_config 中删除 socketPath,那么它可以在本地工作 - 但不是在部署时。
【问题讨论】:
标签: mysql node.js google-app-engine google-cloud-platform google-cloud-sql