From 3d3441d6c7a5646388ab0a77acad57fdb63b9d32 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 4 Apr 2018 11:04:14 +0200 Subject: [PATCH] Don't start application until all components were initialized --- server.ts | 53 +++++++++++++++++++++++-------------------- server/lib/emailer.ts | 2 ++ 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/server.ts b/server.ts index b307e67a1..97941c958 100644 --- a/server.ts +++ b/server.ts @@ -58,7 +58,11 @@ import { initDatabaseModels } from './server/initializers/database' import { migrate } from './server/initializers/migrator' migrate() .then(() => initDatabaseModels(false)) - .then(() => onDatabaseInitDone()) + .then(() => startApplication()) + .catch(err => { + logger.error('Cannot start application.', { err }) + process.exit(-1) + }) // ----------- PeerTube modules ----------- import { installApplication } from './server/initializers' @@ -179,30 +183,29 @@ app.use(function (err, req, res, next) { // ----------- Run ----------- -function onDatabaseInitDone () { +async function startApplication () { const port = CONFIG.LISTEN.PORT - installApplication() - .then(() => { - // ----------- Make the server listening ----------- - server.listen(port, () => { - // Emailer initialization and then job queue initialization - Emailer.Instance.init() - Emailer.Instance.checkConnectionOrDie() - .then(() => JobQueue.Instance.init()) - - // Caches initializations - VideosPreviewCache.Instance.init(CONFIG.CACHE.PREVIEWS.SIZE) - - // Enable Schedulers - BadActorFollowScheduler.Instance.enable() - RemoveOldJobsScheduler.Instance.enable() - - // Redis initialization - Redis.Instance.init() - - logger.info('Server listening on port %d', port) - logger.info('Web server: %s', CONFIG.WEBSERVER.URL) - }) - }) + await installApplication() + + // Email initialization + Emailer.Instance.init() + await Emailer.Instance.checkConnectionOrDie() + + await JobQueue.Instance.init() + + // Caches initializations + VideosPreviewCache.Instance.init(CONFIG.CACHE.PREVIEWS.SIZE) + + // Enable Schedulers + BadActorFollowScheduler.Instance.enable() + RemoveOldJobsScheduler.Instance.enable() + + // Redis initialization + Redis.Instance.init() + + // Make server listening + server.listen(port) + logger.info('Server listening on port %d', port) + logger.info('Web server: %s', CONFIG.WEBSERVER.URL) } diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts index 85cc725fa..d17749b9a 100644 --- a/server/lib/emailer.ts +++ b/server/lib/emailer.ts @@ -60,6 +60,8 @@ class Emailer { async checkConnectionOrDie () { if (!this.transporter) return + logger.info('Testing SMTP server...') + try { const success = await this.transporter.verify() if (success !== true) this.dieOnConnectionFailure() -- 2.25.1