Merge pull request #6202 from crookedneighbor/nconf_setup

Nconf setup
This commit is contained in:
Matteo Pagliazzi
2015-11-08 16:14:45 +01:00
6 changed files with 67 additions and 26 deletions
+31
View File
@@ -0,0 +1,31 @@
import setupNconf from '../../../../../website/src/libs/api-v3/setupNconf';
import nconf from 'nconf';
describe('setupNconf', () => {
before(() => {
sandbox.spy(nconf, 'argv');
sandbox.spy(nconf, 'env');
sandbox.spy(nconf, 'file');
setupNconf();
});
after(() => {
sandbox.restore();
});
it('sets up nconf', () => {
expect(nconf.argv).to.be.calledOnce;
expect(nconf.env).to.be.calledOnce;
expect(nconf.file).to.be.calledOnce;
});
it('sets IS_PROD variable', () => {
expect(nconf.get('IS_PROD')).to.exist;
});
it('sets IS_DEV variable', () => {
expect(nconf.get('IS_DEV')).to.exist;
});
});
+5 -1
View File
@@ -8,5 +8,9 @@ global.sinon = require("sinon");
chai.use(require("sinon-chai"))
chai.use(require("chai-as-promised"));
global.expect = chai.expect
global.sandbox = sinon.sandbox.create();
//------------------------------
// Load nconf for unit tests
//------------------------------
require('../../website/src/libs/api-v3/setupNconf')();
+2 -3
View File
@@ -3,12 +3,11 @@
import winston from 'winston';
import nconf from 'nconf';
// TODO move isProd to a single location
const isProd = nconf.get('NODE_ENV') === 'production';
const IS_PROD = nconf.get('IS_PROD');
let logger = new winston.Logger();
if (isProd) {
if (IS_PROD) {
// TODO production logging, use loggly
// log errors to console too
} else {
+14
View File
@@ -0,0 +1,14 @@
import nconf from 'nconf';
import { join, resolve } from 'path';
const PATH_TO_CONFIG = join(resolve(__dirname, '../../../../config.json'));
export default function setupNconf () {
nconf
.argv()
.env()
.file('user', PATH_TO_CONFIG);
nconf.set('IS_PROD', nconf.get('NODE_ENV') === 'production');
nconf.set('IS_DEV', nconf.get('NODE_ENV') === 'development');
}
+7 -15
View File
@@ -4,8 +4,8 @@ var crypto = require('crypto');
var path = require("path");
var request = require('request');
// Set when utils.setupConfig is run
var isProd, baseUrl;
const IS_PROD = nconf.get('IS_PROD');
const BASE_URL = nconf.get('BASE_URL');
module.exports.sendEmail = function(mailData) {
var smtpTransport = nodemailer.createTransport("SMTP",{
@@ -59,7 +59,7 @@ module.exports.txnEmail = function(mailingInfoArray, emailType, variables, perso
var mailingInfoArray = Array.isArray(mailingInfoArray) ? mailingInfoArray : [mailingInfoArray];
var variables = [
{name: 'BASE_URL', content: baseUrl}
{name: 'BASE_URL', content: BASE_URL}
].concat(variables || []);
// It's important to pass at least a user with its `preferences` as we need to check if he unsubscribed
@@ -120,7 +120,7 @@ module.exports.txnEmail = function(mailingInfoArray, emailType, variables, perso
});
}
if(isProd && mailingInfoArray.length > 0){
if(IS_PROD && mailingInfoArray.length > 0){
request({
url: nconf.get('EMAIL_SERVER:url') + '/job',
method: 'POST',
@@ -167,20 +167,12 @@ module.exports.analytics = { track: function() { }, trackPurchase: function() {
* Load nconf and define default configuration values if config.json or ENV vars are not found
*/
module.exports.setupConfig = function(){
nconf.argv()
.env()
//.file('defaults', path.join(path.resolve(__dirname, '../config.json.example')))
.file('user', path.join(path.resolve(__dirname, './../../../config.json')));
if (nconf.get('NODE_ENV') === "development")
if (nconf.get('IS_DEV'))
Error.stackTraceLimit = Infinity;
//if (nconf.get('NODE_ENV') === 'production')
//if (nconf.get('IS_PROD'))
//require('newrelic');
isProd = nconf.get('NODE_ENV') === 'production';
baseUrl = nconf.get('BASE_URL');
var analytics = isProd && require('./analytics');
var analytics = IS_PROD && require('./analytics');
var analyticsTokens = {
amplitudeToken: nconf.get('AMPLITUDE_KEY'),
googleAnalytics: nconf.get('GA_ID')
+8 -7
View File
@@ -1,4 +1,5 @@
require('babel/register');
require('./libs/api-v3/setupNconf')();
// Only do the minimal amount of work before forking just in case of a dyno restart
var cluster = require("cluster");
var _ = require('lodash');
@@ -6,12 +7,12 @@ var nconf = require('nconf');
var utils = require('./libs/utils');
utils.setupConfig();
var logging = require('./libs/logging');
var isProd = nconf.get('NODE_ENV') === 'production';
var isDev = nconf.get('NODE_ENV') === 'development';
var IS_PROD = nconf.get('IS_PROD');
var IS_DEV = nconf.get('IS_DEV');
var DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING');
var cores = +nconf.get("WEB_CONCURRENCY") || 0;
if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
if (cores!==0 && cluster.isMaster && (IS_DEV || IS_PROD)) {
// Fork workers. If config.json has CORES=x, use that - otherwise, use all cpus-1 (production)
for (var i = 0; i < cores; i += 1) {
cluster.fork();
@@ -41,7 +42,7 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
var mongoose = require('mongoose');
// Use Q promises instead of mpromise in mongoose
mongoose.Promise = require('q');
var mongooseOptions = !isProd ? {} : {
var mongooseOptions = !IS_PROD ? {} : {
replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
};
@@ -113,7 +114,7 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
/* OLD APP IS DISABLED UNTIL COMPATIBLE WITH NEW MODELS
//require('./middlewares/apiThrottle')(oldApp);
oldApp.use(require('./middlewares/domain')(server,mongoose));
if (!isProd && !DISABLE_LOGGING) oldApp.use(require('morgan')("dev"));
if (!IS_PROD && !DISABLE_LOGGING) oldApp.use(require('morgan')("dev"));
oldApp.use(require('compression')());
oldApp.set("views", __dirname + "/../views");
oldApp.set("view engine", "jade");
@@ -161,7 +162,7 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
oldApp.use('/export', require('./routes/dataexport'));
require('./routes/api-v2/swagger')(swagger, v2);
var maxAge = isProd ? 31536000000 : 0;
var maxAge = IS_PROD ? 31536000000 : 0;
// Cache emojis without copying them to build, they are too many
oldApp.use(express['static'](path.join(__dirname, "/../build"), { maxAge: maxAge }));
oldApp.use('/common/dist', express['static'](publicDir + "/../../common/dist", { maxAge: maxAge }));
@@ -172,7 +173,7 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
oldApp.use(require('./middlewares/errorHandler'));
*/
server.on('request', app);
server.listen(app.get("port"), function() {
return logging.info("Express server listening on port " + app.get("port"));