我使用的是来自googlecloud的appengine和cloudsql。它们都在同一个项目中,这应该足以连接到sql。
如果您的appengine应用程序与您的cloudsql示例位于同一个项目中,您可以跳过此部分,转到设置本地环境。否则,继续下一步。
如果我在mac上本地启动node.js,它就可以很容易地连接到云sql,因为我的ip地址被列入了白名单。
一旦我把它部署到appengine,它就不工作了,因为它无法连接到db。我正在使用云sql的公共ip地址。
我已经阅读了很多教程,也阅读了googlecloud提供的文档。我可以看出 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\u配置中删除socketpath,那么它就可以在本地工作——但在部署时就不行了。
1条答案
按热度按时间pcww981p1#
好的,似乎是在应用localhost和socketpath时导致的错误。一切正常,没有
Knex
,如下所示db_config
为了mysql
.最后,记住将cloud\u sql\u示例添加到
app.yaml
```beta_settings:
cloud_sql_instances: CONNECTION_NAME