From 5e8ed616d5da387d41b3c67d65e7f4ca605d0b29 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sun, 21 Jun 2015 18:37:29 -0700 Subject: [PATCH] add wait for db in development before listening for connections --- server/server.js | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/server/server.js b/server/server.js index 5ecabef369..3738150255 100755 --- a/server/server.js +++ b/server/server.js @@ -1,7 +1,6 @@ require('dotenv').load(); var pmx = require('pmx'); pmx.init(); -// handle uncaught exceptions. Forever will restart process on shutdown var R = require('ramda'), assign = require('lodash').assign, @@ -303,8 +302,7 @@ if (true) { // eslint-disable-line module.exports = app; -// start the server if `$ node server.js` -if (require.main === module) { +app.start = function () { app.listen(app.get('port'), function() { console.log( 'FreeCodeCamp server listening on port %d in %s mode', @@ -312,4 +310,29 @@ if (require.main === module) { app.get('env') ); }); +}; + +// start the server if `$ node server.js` +if (require.main === module) { + if (process.env.NODE_ENV === 'production') { + console.log('waiting for db to connect'); + var timeoutHandler; + var onConnect = function() { + console.log('db connected'); + if (timeoutHandler) { + clearTimeout(timeoutHandler); + } + app.start(); + }; + + var timeoutHandler = setTimeout(function() { + // purposely shutdown server + // pm2 should restart this in production + throw new Error('db did not connect, crashing hard'); + }, 5000); + + app.dataSources.db.on('connected', onConnect); + } else { + app.start(); + } }