AppEngine和Cloud SQL连接错误

时间:2018-07-07 11:37:49

标签: mysql node.js google-app-engine google-cloud-platform google-cloud-sql

我正在使用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,那么它将在本地运行-但是在部署时不行。

1 个答案:

答案 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