【问题标题】:AppEngine and Cloud SQL connection errorAppEngine 和 Cloud SQL 连接错误
【发布时间】: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


    【解决方案1】:

    好的,当应用 localhost 和 socketPath 时,似乎导致了错误。没有Knex,一切正常,使用以下db_config for 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
    

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 1970-01-01
      • 2020-08-05
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多