получение случайного отказа от использования в моих веб-сервисах

#google-cloud-platform #google-cloud-functions #google-cloud-sql

#google-cloud-platform #google-cloud-функции #google-cloud-sql

Вопрос:

Я создал несколько веб-сервисов, следуя всем документам Google cloud functions, использующим базу данных MySQL второго поколения. Все работает гладко, но я получаю случайные ошибки «Отказ от экономии»:

 { 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}`;
}
  

Комментарии:

1. ОБНОВЛЕНИЕ: я не закрывал свои функции должным образом. из-за асинхронных методов

Ответ №1:

Облачные функции Google предоставляют сокет Unix по адресу /cloudsql/<INSTANCE_CONNECTION_NAME> , который можно использовать для подключения к экземпляру облачного SQL. Вам необходимо указать это требование в вашей конфигурации:

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

Если вы подключаете кросс-регион или кросс-проект, вам необходимо выполнить несколько дополнительных шагов, но вы можете найти их здесь.

Комментарии:

1. Я обновил код для своего вопроса. это было включено в мой код

2. У вас также есть process.env.NODE_ENV равно «production»? Находится ли функция в том же регионе и проекте в облачной базе данных SQL?

3. хорошо, я удалил условие, и теперь это просто: mysqlConfig.socketPath = /cloudsql/${connectionName} ;

4. Вы все еще получаете ту же ошибку? Вы тестируете развернутый или локальный (локальный запуск не предоставит вам доступ к сокету unix)?

5. Проблема заключалась в том, что я закрывал функции, когда они были асинхронными. В любом случае спасибо