В настоящее время я использую функцию Firebase в качестве бэкэнда node.js для приложения, над которым я работаю. Также я использую Sequalize ORM для соединения с базой данных MySQL. В течение двух или более недель это работало совершенно нормально, но теперь каждый раз, когда я пытаюсь даже запустить приложение, я получаю эту ошибку: SequelizeConnectionError: connect ETIMEDOUT.
Unable to connect to the database: { SequelizeConnectionError: connect ETIMEDOUT
at Utils.Promise.tap.then.catch.err (/user_code/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:149:19)
at tryCatcher (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:690:18)
at _drainQueueStep (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:672:20)
at tryOnImmediate (timers.js:645:5)
at processImmediate [as _immediateCallback] (timers.js:617:5)
Index.js с подключением Sequelize определяется следующим образом:
// Dependecies
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
// App init
const app = express();
// Database Init
const db = require('./configs/db')
db.authenticate()
.then(() => console.log('Connection has been established successfully.'))
.catch(err => console.error('Unable to connect to the database:', err));
// CORS Middleware
app.use(cors());
// Routes
const lists = require('./routes/lists.js');
const tombs = require('./routes/tombs.js');
const doors = require('./routes/doors.js');
const fullTextSearches = require('./routes/ftSearch.js');
const lytics = require('./routes/lytics.js');
// BodyParser Middlware
app.use(bodyParser.json({
limit: '50mb'
}));
// Routes use
app.get('/api/test', (req, res) => res.send('Api is working!'));
app.use('/api/tombs/', tombs);
app.use('/api/doors/', doors);
app.use('/api/ftsearch/', fullTextSearches);
app.use('/api/lytics/', lytics);
app.use('/api/lists/', lists);
// ------------------------
// Function export
// ------------------------
exports.main = functions.https.onRequest(app);
и config / db.js
const db = new Sequelize('db', 'user', 'passwd', {
host: 'host',
dialect: 'mysql',
pool: {
max: 1,
min: 0,
acquire: 30000,
idle: 10000
},
operatorsAliases: false,
logging: false
});
module.exports = db;
Сервер MySQL, который я использую, является своего рода сервисом общего хостинга. Веб-интерфейс приложения размещается на Firebase Hosting. То же приложение, когда я запускаю его, используя Firebase CLI, прекрасно подключается. Проблема возникает только при развертывании. Похоже, проблема с платежным аккаунтом, но у меня есть план Blaze, и любые ограничения не были превышены По сути, это та же проблема, что и в этом вопросе , но там нет ответа, по крайней мере, на тот, который решит мою проблему.
Изменение размера пула вообще не помогло. Любые другие ответы, которые мне удалось найти, наводят на мысль, что это проблема с планом Spark, но я использую Blaze, так что я вроде как потерян ...