我正在使用Google Cloud的App Engine和Cloud SQL。 它们都在同一个项目中,足以连接到SQL。
如果您的App Engine应用程序与您的Cloud位于同一项目中 SQL实例,您可以跳过本节并转到设置您的 当地环境。否则,请继续下一步。
如果我在Mac上本地启动Node.js,则由于我的IP地址已列入白名单,因此可以轻松连接到Cloud SQL。
将其部署到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,那么它将在本地运行-但是在部署时不行。
答案 0 :(得分:2)
好吧,当应用localhost和socketPath时,似乎是由错误引起的。在没有Knex
的情况下,一切正常,在db_config
后面加上mysql
。
db_config = {
user: 'root',
password: 'PASSWORD!',
database: 'DB_NAME',
socketPath: '/cloudsql/CONNECTION_NAME'
};
最后,请记住将cloud_sql_instance添加到app.yaml
beta_settings:
cloud_sql_instances: CONNECTION_NAME