mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-20 22:42:53 -05:00
f489d7df72
no issue - changes xmlrcp & slack `init` function to be `listen` - update the code to use `listen` instead of `init` - changes the tests to make sure that event listeners are not wired up - adds 100% test coverage Since we added slack event listeners, the xmlrpc event tests have been throwing an error: > Unhandled rejection Error See: http://puu.sh/phvjZ.png This is because both xmlrpc & slack are listening to `post.published` events. xmlrpc didn't require any extra stubbing, but the slack listener did By turning the listeners off after the tests, we reset the environment to not impact the next event test We probably need to do more work like this to improve the systems around event handling and make them more robust
114 lines
3.8 KiB
JavaScript
114 lines
3.8 KiB
JavaScript
// # Bootup
|
|
// This file needs serious love & refactoring
|
|
|
|
// Module dependencies
|
|
var express = require('express'),
|
|
uuid = require('node-uuid'),
|
|
Promise = require('bluebird'),
|
|
i18n = require('./i18n'),
|
|
api = require('./api'),
|
|
config = require('./config'),
|
|
errors = require('./errors'),
|
|
middleware = require('./middleware'),
|
|
migrations = require('./data/migration'),
|
|
models = require('./models'),
|
|
permissions = require('./permissions'),
|
|
apps = require('./apps'),
|
|
sitemap = require('./data/xml/sitemap'),
|
|
xmlrpc = require('./data/xml/xmlrpc'),
|
|
slack = require('./data/slack'),
|
|
GhostServer = require('./ghost-server'),
|
|
validateThemes = require('./utils/validate-themes'),
|
|
|
|
dbHash;
|
|
|
|
function initDbHashAndFirstRun() {
|
|
return api.settings.read({key: 'dbHash', context: {internal: true}}).then(function (response) {
|
|
var hash = response.settings[0].value,
|
|
initHash;
|
|
|
|
dbHash = hash;
|
|
|
|
if (dbHash === null) {
|
|
initHash = uuid.v4();
|
|
return api.settings.edit({settings: [{key: 'dbHash', value: initHash}]}, {context: {internal: true}})
|
|
.then(function (response) {
|
|
dbHash = response.settings[0].value;
|
|
return dbHash;
|
|
// Use `then` here to do 'first run' actions
|
|
});
|
|
}
|
|
|
|
return dbHash;
|
|
});
|
|
}
|
|
|
|
// ## Initialise Ghost
|
|
// Sets up the express server instances, runs init on a bunch of stuff, configures views, helpers, routes and more
|
|
// Finally it returns an instance of GhostServer
|
|
function init(options) {
|
|
// ### Initialisation
|
|
// The server and its dependencies require a populated config
|
|
// It returns a promise that is resolved when the application
|
|
// has finished starting up.
|
|
|
|
// Initialize Internationalization
|
|
i18n.init();
|
|
|
|
// Load our config.js file from the local file system.
|
|
return config.load(options.config).then(function () {
|
|
return config.checkDeprecated();
|
|
}).then(function () {
|
|
// Initialise the models
|
|
models.init();
|
|
}).then(function () {
|
|
// Initialize migrations
|
|
return migrations.init();
|
|
}).then(function () {
|
|
// Populate any missing default settings
|
|
return models.Settings.populateDefaults();
|
|
}).then(function () {
|
|
// Initialize the settings cache
|
|
return api.init();
|
|
}).then(function () {
|
|
// Initialize the permissions actions and objects
|
|
// NOTE: Must be done before initDbHashAndFirstRun calls
|
|
return permissions.init();
|
|
}).then(function () {
|
|
return Promise.join(
|
|
// Check for or initialise a dbHash.
|
|
initDbHashAndFirstRun(),
|
|
// Initialize apps
|
|
apps.init(),
|
|
// Initialize sitemaps
|
|
sitemap.init(),
|
|
// Initialize xmrpc ping
|
|
xmlrpc.listen(),
|
|
// Initialize slack ping
|
|
slack.listen()
|
|
);
|
|
}).then(function () {
|
|
// Get reference to an express app instance.
|
|
var parentApp = express();
|
|
|
|
// ## Middleware and Routing
|
|
middleware(parentApp);
|
|
|
|
// Log all theme errors and warnings
|
|
validateThemes(config.paths.themePath)
|
|
.catch(function (result) {
|
|
// TODO: change `result` to something better
|
|
result.errors.forEach(function (err) {
|
|
errors.logError(err.message, err.context, err.help);
|
|
});
|
|
|
|
result.warnings.forEach(function (warn) {
|
|
errors.logWarn(warn.message, warn.context, warn.help);
|
|
});
|
|
});
|
|
|
|
return new GhostServer(parentApp);
|
|
});
|
|
}
|
|
|
|
module.exports = init;
|