From 97f592aa4126f88c7228954b31f34d0b1bcedde4 Mon Sep 17 00:00:00 2001 From: Patrick Garman Date: Wed, 9 Oct 2013 11:07:43 -0500 Subject: [PATCH] Allow Ghost to run using sockets Closes #887 - Adds getSocket function > Returns the socket location if sockets are enabled or false - Adds startGhost function > Callback for server.listen --- core/server.js | 140 ++++++++++++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 60 deletions(-) diff --git a/core/server.js b/core/server.js index 4f752425c5..12f44c44d2 100644 --- a/core/server.js +++ b/core/server.js @@ -4,6 +4,7 @@ var express = require('express'), _ = require('underscore'), colors = require('colors'), semver = require('semver'), + fs = require('fs'), slashes = require('connect-slashes'), errors = require('./server/errorHandling'), admin = require('./server/controllers/admin'), @@ -360,68 +361,87 @@ when(ghost.init()).then(function () { server.get('/:slug/', frontend.single); server.get('/', frontend.homepage); + // Are we using sockets? Custom socket or the default? + function getSocket() { + if (ghost.config().server.hasOwnProperty('socket')) { + return _.isString(ghost.config().server.socket) ? ghost.config().server.socket : path.join(__dirname, '../content/', process.env.NODE_ENV + '.socket'); + } + return false; + } + function startGhost() { + // Tell users if their node version is not supported, and exit + if (!semver.satisfies(process.versions.node, packageInfo.engines.node)) { + console.log( + "\nERROR: Unsupported version of Node".red, + "\nGhost needs Node version".red, + packageInfo.engines.node.yellow, + "you are using version".red, + process.versions.node.yellow, + "\nPlease go to http://nodejs.org to get the latest version".green + ); + + process.exit(0); + } + + // Startup & Shutdown messages + if (process.env.NODE_ENV === 'production') { + console.log( + "Ghost is running...".green, + "\nYour blog is now available on", + ghost.config().url, + "\nCtrl+C to shut down".grey + ); + + // ensure that Ghost exits correctly on Ctrl+C + process.on('SIGINT', function () { + console.log( + "\nGhost has shut down".red, + "\nYour blog is now offline" + ); + process.exit(0); + }); + } else { + console.log( + "Ghost is running...".green, + "\nListening on", + getSocket() || ghost.config().server.host + ':' + ghost.config().server.port, + "\nUrl configured as:", + ghost.config().url, + "\nCtrl+C to shut down".grey + ); + // ensure that Ghost exits correctly on Ctrl+C + process.on('SIGINT', function () { + console.log( + "\nGhost has shutdown".red, + "\nGhost was running for", + Math.round(process.uptime()), + "seconds" + ); + process.exit(0); + }); + } + + // Let everyone know we have finished loading + loading.resolve(); + } // ## Start Ghost App - server.listen( - ghost.config().server.port, - ghost.config().server.host, - function () { + if (getSocket()) { + // Make sure the socket is gone before trying to create another + fs.unlink(getSocket(), function (err) { + server.listen( + getSocket(), + startGhost + ); + fs.chmod(getSocket(), '0744'); + }); - // Tell users if their node version is not supported, and exit - if (!semver.satisfies(process.versions.node, packageInfo.engines.node)) { - console.log( - "\nERROR: Unsupported version of Node".red, - "\nGhost needs Node version".red, - packageInfo.engines.node.yellow, - "you are using version".red, - process.versions.node.yellow, - "\nPlease go to http://nodejs.org to get the latest version".green - ); - - process.exit(0); - } - - // Startup & Shutdown messages - if (process.env.NODE_ENV === 'production') { - console.log( - "Ghost is running...".green, - "\nYour blog is now available on", - ghost.config().url, - "\nCtrl+C to shut down".grey - ); - - // ensure that Ghost exits correctly on Ctrl+C - process.on('SIGINT', function () { - console.log( - "\nGhost has shut down".red, - "\nYour blog is now offline" - ); - process.exit(0); - }); - } else { - console.log( - "Ghost is running...".green, - "\nListening on", - ghost.config().server.host + ':' + ghost.config().server.port, - "\nUrl configured as:", - ghost.config().url, - "\nCtrl+C to shut down".grey - ); - // ensure that Ghost exits correctly on Ctrl+C - process.on('SIGINT', function () { - console.log( - "\nGhost has shutdown".red, - "\nGhost was running for", - Math.round(process.uptime()), - "seconds" - ); - process.exit(0); - }); - } - - // Let everyone know we have finished loading - loading.resolve(); - } - ); + } else { + server.listen( + ghost.config().server.port, + ghost.config().server.host, + startGhost + ); + } }, errors.logAndThrowError);