【问题标题】:getting random econnrefused in my webservices在我的网络服务中随机拒绝
【发布时间】:2019-08-15 18:59:58
【问题描述】:

我根据所有使用第二代 MySQL 数据库的谷歌云功能文档创建了一些网络服务。 一切运行顺利,但我收到随机的“Econnrefused”错误:

{ Error: connect ECONNREFUSED /cloudsql/calculator-226400:us-central1:vanessasqlus at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1191:14) -------------------- at Protocol._enqueue (/srv/node_modules/mysql/lib/protocol/Protocol.js:144:48) at Protocol.handshake (/srv/node_modules/mysql/lib/protocol/Protocol.js:51:23) at PoolConnection.connect (/srv/node_modules/mysql/lib/Connection.js:118:18) at Pool.getConnection (/srv/node_modules/mysql/lib/Pool.js:48:16) at Pool.query (/srv/node_modules/mysql/lib/Pool.js:202:8) at Object.get_user (/srv/request_post/user.js:15:15) at exports.landing_ws (/srv/index.js:84:18) at /worker/worker.js:783:7 at /worker/worker.js:766:11 at _combinedTickCallback (internal/process/next_tick.js:132:7) errno: 'ECONNREFUSED', code: 'ECONNREFUSED', syscall: 'connect', address: '/cloudsql/calculator-226400:us-central1:vanessasqlus', fatal: true }

我已将所有内容迁移到美国,但仍然出现随机连接错误。 这是我的连接字符串:

const connectionName =
    process.env.INSTANCE_CONNECTION_NAME || 'calculator-226400:us-central1:vanessasqlus';
const dbUser = process.env.SQL_USER || '*';
const dbPassword = process.env.SQL_PASSWORD || '*';
const dbName = process.env.SQL_NAME || '*';

let mysqlConfig = {
    connectionLimit: 1,
    user: dbUser,
    password: dbPassword,
    database: dbName,
};
...
if (!mysqlPool) {
        mysqlPool = mysql.createPool(mysqlConfig);
    }
if (process.env.NODE_ENV === 'production') {
mysqlConfig.socketPath = `/cloudsql/${connectionName}`;
}

【问题讨论】:

  • 更新:我没有正确关闭我的功能。因为异步方法

标签: google-cloud-platform google-cloud-functions google-cloud-sql


【解决方案1】:

Google Cloud Functions 在/cloudsql/<INSTANCE_CONNECTION_NAME> 提供了一个 Unix 套接字,可用于连接到 Cloud SQL 实例。您需要在配置中指定此要求:

mysqlConfig.socketPath = `/cloudsql/${connectionName}`;

如果您要跨区域或跨项目连接,则需要执行一些额外的步骤,但您可以找到那些here

【讨论】:

  • 我更新了我的问题的代码。包含在我的代码中
  • 你也有process.env.NODE_ENV等于'production'吗? Cloud SQL 数据库中的函数是否在同一个区域和项目中?
  • 好的,我删除了条件,现在它只是:mysqlConfig.socketPath = /cloudsql/${connectionName};
  • 您仍然收到同样的错误吗?您是在测试部署还是在本地测试(在本地运行不会授予您对 unix 套接字的访问权限)?
  • 这是我在异步时关闭函数的方式的问题。还是谢谢
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 2021-05-25
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多