diff --git a/.travis.yml b/.travis.yml index d2cab743..744fe2cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,6 @@ before_install: - mysql -e 'GRANT ALL ON urungi_tests.* TO urungi@localhost IDENTIFIED BY "urungi"' - psql -c 'create database urungi_tests;' -U postgres - npm i -g npm +before_script: + - npx migrate-mongo up cache: npm diff --git a/README.md b/README.md index 8f9ace46..28c1c7f6 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,11 @@ not going to explore MondoDB data. npm ci ``` +4. Run MongoDB migrations + + ``` + npx migrate-mongo up + ``` ## Configuration diff --git a/server.js b/server.js index 5fdff66e..f55f71aa 100644 --- a/server.js +++ b/server.js @@ -1,16 +1,29 @@ const debug = require('debug')('urungi:server'); const cluster = require('cluster'); +const migrate = require('migrate-mongo'); -if (cluster.isMaster && process.env.NODE_ENV !== 'test') { - var numCPUs = require('os').cpus().length; +if (cluster.isMaster) { + migrate.database.connect().then(db => { + return migrate.status(db).then(statuses => { + db.close(); + if (statuses.some(s => s.appliedAt === 'PENDING')) { + throw new Error('Some migrations are pending. Run `npx migrate-mongo up` before starting the server'); + } + }); + }).then(function () { + var numCPUs = require('os').cpus().length; - // Fork workers. - for (var i = 0; i < numCPUs; i++) { - cluster.fork(); - } + // Fork workers. + for (var i = 0; i < numCPUs; i++) { + cluster.fork(); + } - cluster.on('exit', function (deadWorker, code, signal) { - cluster.fork(); + cluster.on('exit', function (deadWorker, code, signal) { + cluster.fork(); + }); + }, function (error) { + console.error('Error: ' + error.message); + process.exitCode = 1; }); } else { const app = require('./app');