From e88b786073d765faa66c894f16a09e9cf66ab488 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 26 Apr 2017 08:55:02 -0600 Subject: [PATCH] Reload configuration on SIGHUP --- package.json | 9 +++++---- src/server.js | 32 ++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 141a7e8..dce03c4 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,10 @@ "test": "mocha test/**.js" }, "dependencies": { - "async": "2.2.0", + "@mapbox/mapbox-gl-native": "3.4.4", + "@mapbox/sphericalmercator": "1.0.5", "advanced-pool": "0.3.2", + "async": "2.2.0", "base64url": "2.0.0", "canvas": "1.6.5", "clone": "2.1.1", @@ -29,6 +31,7 @@ "express": "4.15.2", "glyph-pbf-composite": "0.0.2", "handlebars": "4.0.6", + "http-shutdown": "^1.2.0", "mbtiles": "0.9.0", "morgan": "1.8.1", "node-pngquant-native": "1.0.4", @@ -38,9 +41,7 @@ "request": "2.81.0", "sharp": "0.17.2", "tileserver-gl-styles": "1.1.1", - "vector-tile": "1.3.0", - "@mapbox/mapbox-gl-native": "3.4.4", - "@mapbox/sphericalmercator": "1.0.5" + "vector-tile": "1.3.0" }, "devDependencies": { "should": "^11.2.0", diff --git a/src/server.js b/src/server.js index 351151f..9d02dd5 100644 --- a/src/server.js +++ b/src/server.js @@ -10,6 +10,7 @@ var fs = require('fs'), var base64url = require('base64url'), clone = require('clone'), cors = require('cors'), + enableShutdown = require('http-shutdown'), express = require('express'), handlebars = require('handlebars'), mercator = new (require('@mapbox/sphericalmercator'))(), @@ -28,7 +29,7 @@ if (!isLight) { serve_rendered = require('./serve_rendered'); } -module.exports = function(opts) { +function start(opts) { console.log('Starting server'); var app = express().disable('x-powered-by'), @@ -359,12 +360,35 @@ module.exports = function(opts) { this.address().address, this.address().port); }); - process.on('SIGINT', function() { - process.exit(); - }); + // add server.shutdown() to gracefully stop serving + enableShutdown(server); return { app: app, server: server }; +} + +module.exports = function(opts) { + var running = start(opts); + + process.on('SIGINT', function() { + process.exit(); + }); + + process.on('SIGHUP', function() { + console.log('Stopping server and reloading config'); + + running.server.shutdown(function() { + for (var key in require.cache) { + delete require.cache[key]; + } + + var restarted = start(opts); + running.server = restarted.server; + running.app = restarted.app; + }); + }); + + return running; };