2011-06-13 11:23:02 +08:00
|
|
|
#!/usr/bin/env node
|
2011-06-10 00:34:02 +08:00
|
|
|
|
2011-06-13 11:23:02 +08:00
|
|
|
/*
|
|
|
|
* SQL API loader
|
|
|
|
* ===============
|
|
|
|
*
|
2015-12-04 00:28:18 +08:00
|
|
|
* node app [environment]
|
2011-06-13 11:23:02 +08:00
|
|
|
*
|
|
|
|
* environments: [development, test, production]
|
|
|
|
*
|
|
|
|
*/
|
2015-05-12 23:33:41 +08:00
|
|
|
var _ = require('underscore');
|
|
|
|
var fs = require('fs');
|
|
|
|
var path = require('path');
|
2011-06-10 00:34:02 +08:00
|
|
|
|
2015-05-12 23:33:41 +08:00
|
|
|
var ENV = process.env.NODE_ENV || 'development';
|
2014-03-13 20:54:10 +08:00
|
|
|
|
2015-05-12 23:33:41 +08:00
|
|
|
if (process.argv[2]) {
|
|
|
|
ENV = process.argv[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
process.env.NODE_ENV = ENV;
|
|
|
|
|
|
|
|
var availableEnvironments = ['development', 'production', 'test', 'staging'];
|
2014-03-14 17:48:33 +08:00
|
|
|
|
2011-06-13 11:23:02 +08:00
|
|
|
// sanity check arguments
|
2015-05-12 23:33:41 +08:00
|
|
|
if (availableEnvironments.indexOf(ENV) === -1) {
|
2014-03-13 20:54:10 +08:00
|
|
|
console.error("\nnode app.js [environment]");
|
2015-05-12 23:33:41 +08:00
|
|
|
console.error("environments: " + availableEnvironments.join(', '));
|
2011-06-13 11:23:02 +08:00
|
|
|
process.exit(1);
|
2011-06-10 00:34:02 +08:00
|
|
|
}
|
|
|
|
|
2011-06-13 11:23:02 +08:00
|
|
|
// set Node.js app settings and boot
|
2011-10-08 00:28:07 +08:00
|
|
|
global.settings = require(__dirname + '/config/settings');
|
|
|
|
var env = require(__dirname + '/config/environments/' + ENV);
|
2014-07-30 18:39:03 +08:00
|
|
|
env.api_hostname = require('os').hostname().split('.')[0];
|
2011-06-13 11:23:02 +08:00
|
|
|
_.extend(global.settings, env);
|
2014-03-13 18:52:40 +08:00
|
|
|
|
2015-05-12 23:33:41 +08:00
|
|
|
global.log4js = require('log4js');
|
|
|
|
var log4js_config = {
|
2014-05-27 17:51:44 +08:00
|
|
|
appenders: [],
|
2014-03-13 18:52:40 +08:00
|
|
|
replaceConsole:true
|
|
|
|
};
|
2014-03-13 19:09:39 +08:00
|
|
|
|
2014-05-27 17:51:44 +08:00
|
|
|
if ( env.log_filename ) {
|
|
|
|
var logdir = path.dirname(env.log_filename);
|
|
|
|
// See cwd inlog4js.configure call below
|
|
|
|
logdir = path.resolve(__dirname, logdir);
|
|
|
|
if ( ! fs.existsSync(logdir) ) {
|
|
|
|
console.error("Log filename directory does not exist: " + logdir);
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
console.log("Logs will be written to " + env.log_filename);
|
|
|
|
log4js_config.appenders.push(
|
|
|
|
{ type: "file", filename: env.log_filename }
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
log4js_config.appenders.push(
|
|
|
|
{ type: "console", layout: { type:'basic' } }
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2014-03-13 19:09:39 +08:00
|
|
|
if ( global.settings.rollbar ) {
|
|
|
|
log4js_config.appenders.push({
|
|
|
|
type: __dirname + "/app/models/log4js_rollbar.js",
|
|
|
|
options: global.settings.rollbar
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-05-12 23:33:41 +08:00
|
|
|
global.log4js.configure(log4js_config, { cwd: __dirname });
|
|
|
|
global.logger = global.log4js.getLogger();
|
2014-03-13 18:52:40 +08:00
|
|
|
|
2015-12-04 00:28:18 +08:00
|
|
|
|
2011-06-13 11:23:02 +08:00
|
|
|
// kick off controller
|
2015-05-12 23:33:41 +08:00
|
|
|
if ( ! global.settings.base_url ) {
|
|
|
|
global.settings.base_url = '/api/*';
|
|
|
|
}
|
2014-03-13 20:50:53 +08:00
|
|
|
|
|
|
|
var version = require("./package").version;
|
|
|
|
|
2015-12-04 01:33:17 +08:00
|
|
|
var app = require(global.settings.app_root + '/app/app')();
|
2012-10-10 00:40:17 +08:00
|
|
|
app.listen(global.settings.node_port, global.settings.node_host, function() {
|
2015-05-12 23:33:41 +08:00
|
|
|
console.log(
|
|
|
|
"CartoDB SQL API %s listening on %s:%s with base_url %s (%s)",
|
|
|
|
version, global.settings.node_host, global.settings.node_port, global.settings.base_url, ENV
|
|
|
|
);
|
2012-10-10 00:40:17 +08:00
|
|
|
});
|
2014-03-13 19:09:39 +08:00
|
|
|
|
|
|
|
process.on('uncaughtException', function(err) {
|
2015-05-12 23:33:41 +08:00
|
|
|
global.logger.error('Uncaught exception: ' + err.stack);
|
2014-03-13 19:09:39 +08:00
|
|
|
});
|
2014-05-27 17:51:44 +08:00
|
|
|
|
|
|
|
process.on('SIGHUP', function() {
|
2014-12-02 19:25:25 +08:00
|
|
|
global.log4js.clearAndShutdownAppenders(function() {
|
|
|
|
global.log4js.configure(log4js_config);
|
2015-05-12 23:33:41 +08:00
|
|
|
global.logger = global.log4js.getLogger();
|
2014-12-02 19:25:25 +08:00
|
|
|
console.log('Log files reloaded');
|
|
|
|
});
|
2014-05-27 17:51:44 +08:00
|
|
|
});
|
2016-01-25 23:28:19 +08:00
|
|
|
|
|
|
|
process.on('SIGTERM', function () {
|
|
|
|
app.batch.stop();
|
|
|
|
app.batch.drain(function (err) {
|
|
|
|
if (err) {
|
|
|
|
console.log('Exit with error');
|
|
|
|
return process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log('Exit gracefully');
|
|
|
|
process.exit(0);
|
|
|
|
});
|
|
|
|
});
|