AppEngine 和 Cloud SQL 连接错误
AppEngine and Cloud SQL connection error
我正在使用来自 Google Cloud 的 App Engine 和 Cloud SQL。
他们都在同一个项目中,这应该足以连接到 SQL.
If your App Engine application is in the same project as your Cloud
SQL instance, you can skip this section and go to Setting up your
local environment. Otherwise, proceed to the next step.
如果我在 Mac 上启动 Node.js,本地 - 它可以轻松连接到云 SQL,因为我的 IP 地址已列入白名单。
我一将它部署到 App Engine,它就无法工作,因为它无法连接到数据库。我正在使用云的 Public IP 地址 SQL。
看了很多教程,也看了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_config 中删除 socketPath,那么它会在本地工作——但在部署时不会。
好的,似乎错误是在应用 localhost 和 socketPath 时引起的。没有 Knex
一切正常,使用 mysql
.
以下 db_config
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
我正在使用来自 Google Cloud 的 App Engine 和 Cloud SQL。 他们都在同一个项目中,这应该足以连接到 SQL.
If your App Engine application is in the same project as your Cloud SQL instance, you can skip this section and go to Setting up your local environment. Otherwise, proceed to the next step.
如果我在 Mac 上启动 Node.js,本地 - 它可以轻松连接到云 SQL,因为我的 IP 地址已列入白名单。
我一将它部署到 App Engine,它就无法工作,因为它无法连接到数据库。我正在使用云的 Public IP 地址 SQL。
看了很多教程,也看了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_config 中删除 socketPath,那么它会在本地工作——但在部署时不会。
好的,似乎错误是在应用 localhost 和 socketPath 时引起的。没有 Knex
一切正常,使用 mysql
.
db_config
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