Приложение Heroku Nodejs упало после запуска - PullRequest
0 голосов
/ 22 апреля 2020

Мое nodejs приложение падает в Heroku. У меня есть два сервера, работающие в двух разных портах. Один для express маршрутов и другой для socket.io. Приложения прекрасно работают и развернуты в Heroku. Он запускается, соединение с БД в порядке, затем демон сервера также работает в течение некоторого периода времени. Затем он меняет состояние на сбойный. Нет журнала ошибок после cra sh и нет причин для cra sh. Вот лог от Heroku,

2020-04-22T14:52:19.980682+00:00 app[web.1]: > iLearn@1.0.0 start /app
2020-04-22T14:52:19.980683+00:00 app[web.1]: > PORT=5000 node server.js
2020-04-22T14:52:19.980683+00:00 app[web.1]: 
2020-04-22T14:52:20.741515+00:00 app[web.1]: 
2020-04-22T14:52:20.782048+00:00 app[web.1]: API server started on: 5000
2020-04-22T14:52:21.087402+00:00 app[web.1]: Messaging Manager started..
2020-04-22T14:52:21.087501+00:00 app[web.1]: MessagingManager::startDaemon
2020-04-22T14:52:21.089358+00:00 app[web.1]: Messaging server running on port:5001
2020-04-22T14:52:21.130079+00:00 app[web.1]: DB Connected
2020-04-22T14:52:21.132905+00:00 app[web.1]: {"timestamp":"2020-04-22T14:52:21.131Z","message":"DB Connected","level":"info"}
2020-04-22T14:52:26.097164+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:31.100561+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:36.107406+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:41.112479+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:46.116481+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:51.121785+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:52:56.127394+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:53:01.136499+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:53:06.136680+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:53:11.144029+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:53:16.145616+00:00 app[web.1]: MessagingManager::daemon
2020-04-22T14:53:16.792389+00:00 heroku[web.1]: State changed from starting to crashed

Вот мой сервер. js file,

const express = require('express')
const MessagingManager = require("./util/messagingManager")

app = express()
bodyParser = require('body-parser');
require('dotenv').config();
port = process.env.PORT || 5000;

app.listen(port);
console.log('API server started on: ' + port);
app.use(express.static('public'))
//app.use(formidable());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.set('view engine', 'pug');
app.set('views', './views')
var routes = require('./routes'); //importing route
app.use('/', routes); //register the route


const messagingApp = express();
const messagingServer = require("http").createServer(messagingApp);
const io = require("socket.io").listen(messagingServer);
let messagingManager = new MessagingManager()
messagingManager.startDaemon()

port = process.env.MESSAGING_PORT || 5001;


io.on("connection", socket => {
    console.log("a user connected");
    let id = socket.handshake.query.id
    console.log(socket.id)
    messagingManager.addConnection(id, socket)

    socket.on("message", msg => {
      if (msg.type == "MESSAGE_READ_STATUS")
       messagingManager.setMessageStatus(msg)
      else
        messagingManager.sendMessage(msg)
    });

    socket.on("disconnect", () => {
      //io.emit("chat message", msg);

    });

    socket.on("endsession", msg => {
      //io.emit("chat message", msg);
      console.log("session ended." + id)
      messagingManager.removeConnection(msg.id)
      socket.disconnect()
    });

    // not used
    socket.on("session", msg => {
      //io.emit("chat message", msg);
      console.log("session established")
      messagingManager.addConnection(msg.id, socket)

    });
});

messagingServer.listen(port, () => console.log("Messaging server running on port:" + port));



1 Ответ

0 голосов
/ 23 апреля 2020

На самом деле трудно понять, почему произошел сбой приложения, так как журнал просто говорит, что приложение зависало без какого-либо сообщения. Ошибка привязки порта не возникла, и вызывается функция обратного вызова прослушивания приложения. Фактическая проблема, кажется, порт. Я установил порт в файле .env и package. json. Он переопределяет Heroi Dynami c порт. Спасибо @Beppe C за указание на это. Я удалил переменную порта из .env и пакета. json и заново развернул приложение. Сейчас работает нормально. Другая проблема заключается в том, что приложение heroku не позволяет использовать два порта в одном приложении. Итак, мне нужно создать два приложения. Один для express HTTP-маршрута и другой для socket.io. Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...