From 4804d868c4f1d0c61fb045b05a6c818a61ed631a Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sun, 21 Jun 2015 18:10:17 -0700 Subject: [PATCH 1/3] wrap server.listen in if module prevents server from starting durring testing/scripting --- server/server.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/server/server.js b/server/server.js index 4d59ccbe7f..5ecabef369 100755 --- a/server/server.js +++ b/server/server.js @@ -301,20 +301,15 @@ if (true) { // eslint-disable-line }); } -/** - * Start Express server. - */ - - -app.listen(app.get('port'), function() { - console.log( - 'FreeCodeCamp server listening on port %d in %s mode', - app.get('port'), - app.get('env') - ); -}); +module.exports = app; // start the server if `$ node server.js` - - -module.exports = app; +if (require.main === module) { + app.listen(app.get('port'), function() { + console.log( + 'FreeCodeCamp server listening on port %d in %s mode', + app.get('port'), + app.get('env') + ); + }); +} From 5e8ed616d5da387d41b3c67d65e7f4ca605d0b29 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sun, 21 Jun 2015 18:37:29 -0700 Subject: [PATCH 2/3] 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(); + } } From 7df91e63102efaeee7d9077d3e7bc6fcba743ca1 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sun, 21 Jun 2015 19:11:42 -0700 Subject: [PATCH 3/3] add total time to start to logs during waitFordb --- server/server.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/server/server.js b/server/server.js index 3738150255..637892831e 100755 --- a/server/server.js +++ b/server/server.js @@ -187,6 +187,8 @@ app.use( }) ); +// track when connecting to db starts +var startTime = Date.now(); boot(app, { appRootDir: __dirname, dev: process.env.NODE_ENV @@ -315,10 +317,11 @@ app.start = function () { // 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; + console.log('waiting for db to connect'); + var onConnect = function() { - console.log('db connected'); + console.log('db connected in %s ms', Date.now() - startTime); if (timeoutHandler) { clearTimeout(timeoutHandler); } @@ -326,9 +329,15 @@ if (require.main === module) { }; var timeoutHandler = setTimeout(function() { + var message = + 'db did not after ' + + (Date.now() - startTime) + + ' ms connect crashing hard'; + + console.log(message); // purposely shutdown server // pm2 should restart this in production - throw new Error('db did not connect, crashing hard'); + throw new Error(message); }, 5000); app.dataSources.db.on('connected', onConnect);