Don't start application until all components were initialized

pull/489/head
Chocobozzz 2018-04-04 11:04:14 +02:00
parent 72de91cb10
commit 3d3441d6c7
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 26 additions and 21 deletions

View File

@ -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())
await installApplication()
// Caches initializations
VideosPreviewCache.Instance.init(CONFIG.CACHE.PREVIEWS.SIZE)
// Email initialization
Emailer.Instance.init()
await Emailer.Instance.checkConnectionOrDie()
// Enable Schedulers
BadActorFollowScheduler.Instance.enable()
RemoveOldJobsScheduler.Instance.enable()
await JobQueue.Instance.init()
// Redis initialization
Redis.Instance.init()
// Caches initializations
VideosPreviewCache.Instance.init(CONFIG.CACHE.PREVIEWS.SIZE)
logger.info('Server listening on port %d', port)
logger.info('Web server: %s', CONFIG.WEBSERVER.URL)
})
})
// 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)
}

View File

@ -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()