Node.js приложение вылетает ровно через 1 минуту после успешного запроса cleardb - PullRequest
0 голосов
/ 20 января 2020

Я запустил свое приложение на Heroku и добавил cleardb: ignite как MySQL. Приложение работало хорошо, пока не выполнило запрос MySQL. Приложение получило успешный результат от MySQL, но затем, ровно через 1 минуту, приложение упало. Журналы показаны как показано ниже.

2020-01-20T16:22:50.298705+00:00 heroku[router]: at=info method=GET path="/yas/rest/account" host=kuangs.herokuapp.com request_id=5368da7a-bbfa-4808-b3d8-705c4b908df8 fwd="216.197.177.28" dyno=web.1 connect=0ms service=231ms status=200 bytes=382 protocol=https
2020-01-20T16:23:50.269441+00:00 app[web.1]: events.js:200
2020-01-20T16:23:50.269482+00:00 app[web.1]: throw er; // Unhandled 'error' event
2020-01-20T16:23:50.269484+00:00 app[web.1]: ^
2020-01-20T16:23:50.269486+00:00 app[web.1]: 
2020-01-20T16:23:50.269489+00:00 app[web.1]: Error: Connection lost: The server closed the connection.
2020-01-20T16:23:50.269491+00:00 app[web.1]: at Protocol.end (/app/node_modules/mysql/lib/protocol/Protocol.js:112:13)
2020-01-20T16:23:50.269494+00:00 app[web.1]: at Socket.<anonymous> (/app/node_modules/mysql/lib/Connection.js:97:28)
2020-01-20T16:23:50.269495+00:00 app[web.1]: at Socket.<anonymous> (/app/node_modules/mysql/lib/Connection.js:525:10)
2020-01-20T16:23:50.269497+00:00 app[web.1]: at Socket.emit (events.js:228:7)
2020-01-20T16:23:50.269500+00:00 app[web.1]: at endReadableNT (_stream_readable.js:1185:12)
2020-01-20T16:23:50.269502+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:81:21)
2020-01-20T16:23:50.269504+00:00 app[web.1]: Emitted 'error' event on Connection instance at:
2020-01-20T16:23:50.269507+00:00 app[web.1]: at Connection._handleProtocolError (/app/node_modules/mysql/lib/Connection.js:426:8)
2020-01-20T16:23:50.269509+00:00 app[web.1]: at Protocol.emit (events.js:223:5)
2020-01-20T16:23:50.269511+00:00 app[web.1]: at Protocol._delegateError (/app/node_modules/mysql/lib/protocol/Protocol.js:398:10)
2020-01-20T16:23:50.269513+00:00 app[web.1]: at Protocol.end (/app/node_modules/mysql/lib/protocol/Protocol.js:116:8)
2020-01-20T16:23:50.269515+00:00 app[web.1]: at Socket.<anonymous> (/app/node_modules/mysql/lib/Connection.js:97:28)
2020-01-20T16:23:50.269517+00:00 app[web.1]: [... lines matching original stack trace ...]
2020-01-20T16:23:50.269519+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:81:21) {
2020-01-20T16:23:50.269520+00:00 app[web.1]: fatal: true,
2020-01-20T16:23:50.269522+00:00 app[web.1]: code: 'PROTOCOL_CONNECTION_LOST'
2020-01-20T16:23:50.269524+00:00 app[web.1]: }
2020-01-20T16:23:50.292322+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-01-20T16:23:50.292783+00:00 app[web.1]: npm ERR! errno 1
2020-01-20T16:23:50.294244+00:00 app[web.1]: npm ERR! myappnode.github@1.0.0 start: `node server.js`
2020-01-20T16:23:50.294463+00:00 app[web.1]: npm ERR! Exit status 1
2020-01-20T16:23:50.294714+00:00 app[web.1]: npm ERR!
2020-01-20T16:23:50.294917+00:00 app[web.1]: npm ERR! Failed at the myappnode.github@1.0.0 start script.
2020-01-20T16:23:50.295113+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2020-01-20T16:23:51.112899+00:00 app[web.1]: 
2020-01-20T16:23:51.113277+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2020-01-20T16:23:51.113508+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-01-20T16_23_50_296Z-debug.log
2020-01-20T16:23:51.370082+00:00 heroku[web.1]: State changed from up to crashed
2020-01-20T16:23:51.374569+00:00 heroku[web.1]: State changed from crashed to starting
2020-01-20T16:23:51.359737+00:00 heroku[web.1]: Process exited with status 1
2020-01-20T16:23:53.296185+00:00 heroku[web.1]: Starting process with command `npm start`
2020-01-20T16:23:55.203013+00:00 app[web.1]: 
2020-01-20T16:23:55.203038+00:00 app[web.1]: > myappnode.github@1.0.0 start /app
2020-01-20T16:23:55.203041+00:00 app[web.1]: > node server.js
2020-01-20T16:23:55.203043+00:00 app[web.1]: 
2020-01-20T16:23:55.355499+00:00 app[web.1]: Server is running on port 21066
2020-01-20T16:23:55.802193+00:00 heroku[web.1]: State changed from starting to up

Из приведенного выше журнала мы можем прочитать, что во время 16:22:50.298705 я отправил повторный запрос на получение списка учетных записей. (Приложение отправляло запрос на MySQL, и результат был успешным и правильным.) И затем ровно через 1 минуту, при 16:23:50.269441, приложение зависало.

Если я продолжу делать запрос до 1 минуты истекает, приложение не обработает sh и вернет правильный результат запроса. Но как только я прекращаю выполнять запрос, через 1 минуту приложение вылетает.

Я подозреваю, что, как только соединение установлено между приложением и cleardb, запускается минутный таймер. И если в течение одной минуты соединение не будет активным, произойдет сбой и произойдет сбой приложения.

Я также запустил это приложение на локальном хосте, на моем MacBook Pro. Не было такой проблемы. Похоже, это связано с некоторой спецификацией cleardb c.

Обращение за помощью. И СПАСИБО!

1 Ответ

0 голосов
/ 20 января 2020

Наконец я понял, что не завершил соединение после запроса. Но, похоже, в библиотеке есть недостаток, который вызывает сбой при разрыве соединения со стороны сервера.

...