From 62222d2f6a8e6fc61510c01738a56907a6424989 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sun, 15 Feb 2015 11:49:52 +0300 Subject: [PATCH 1/8] disable robots/googlebot indexing for non-prod envs --- app/views/layout.jade | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/layout.jade b/app/views/layout.jade index 70a9875f..b9f0d489 100644 --- a/app/views/layout.jade +++ b/app/views/layout.jade @@ -10,6 +10,9 @@ html.no-js meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1') meta(name='description', content='This rapid MVP was built with Eskimo.') meta(name='viewport', content='width=device-width, initial-scale=1') + if settings.server.env !== 'production' + meta(name='robots' content='noindex') + meta(name='googlebot' content='noindex') block stylesheets link(rel='stylesheet', href='/css/style.css') From 31534f085bbe0ce7a84c874f33749220ee40029d Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:12:30 +0300 Subject: [PATCH 2/8] add gulp-autoprefixer --- gulpfile.js | 10 +++++++++- package.json | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index bba1a44b..a84d18c1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -25,6 +25,7 @@ var override = require('gulp-rev-css-url'); var filter = require('gulp-filter'); var livereload = require('tiny-lr')(); var nodemon = require('gulp-nodemon'); +var autoprefixer = require('gulp-autoprefixer'); //var bowerJSON = require('./bower.json'); //var googlecdn = require('gulp-google-cdn'); @@ -64,12 +65,19 @@ gulp.task('jshint', function() { .pipe(jshint.reporter(stylish)); }); + gulp.task('less', function() { return gulp .src([ './assets/public/css/style.less' ]) - .pipe(less().on('error', logger.error)) + .pipe(sourcemaps.init()) + .pipe(less().on('error', logger.error)) + .pipe(autoprefixer({ + // browsers: ['last 2 versions'], + cascade: true, + remove: true + })) .pipe(sourcemaps.write('./maps')) .pipe(gulp.dest('./assets/public/css')); }); diff --git a/package.json b/package.json index 0213d356..cbdfb156 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "cookie": "^0.1.2", "del": "^0.1.3", "gulp": "^3.8.8", + "gulp-autoprefixer": "^2.1.0", "gulp-bower": "0.0.6", "gulp-csso": "^0.2.9", "gulp-exit": "0.0.2", From e197ea65f2ace3741916c185ce267d0ec6441b72 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:30:24 +0300 Subject: [PATCH 3/8] generate boot/config.js with: - environment-specific db names; - random session secret and cookieParser (via chance.js); - enabled autoprefixer for less middleware; --- bin/eskimo.js | 25 ++++++- package.json | 1 + {boot => templates/boot}/config.js | 103 ++++++++++++++++++++++++----- 3 files changed, 112 insertions(+), 17 deletions(-) rename {boot => templates/boot}/config.js (65%) diff --git a/bin/eskimo.js b/bin/eskimo.js index fd47040f..826f3c5b 100755 --- a/bin/eskimo.js +++ b/bin/eskimo.js @@ -20,6 +20,8 @@ var pluralize = require('pluralize'); _.pluralize = pluralize.plural; _.singularize = pluralize.singular; +var Chance = require('chance'); + var multiline = require('multiline'); var async = require('async'); var fs = require('fs'); @@ -157,7 +159,6 @@ function create(dirname) { }, 'Readme.md': function createReadmeFile(callback) { - var readmePath = path.resolve(path.join(dirname, 'Readme.md')); fs.readFile(path.join(templates, 'Readme.md'), 'utf8', function(err, data) { @@ -174,6 +175,28 @@ function create(dirname) { }); + }, + + + 'config.js': function createConfigFile(callback) { + + var configPath = path.resolve(path.join(dirname, 'boot', 'config.js')); + + fs.readFile(path.join(templates, 'boot', 'config.js'), 'utf8', function(err, data) { + + if (err) { + return callback(err); + } + + data = _.template(data)({ + name: path.basename(dirname), + chance: new Chance() + }); + + fs.writeFile(readmePath, data, callback); + fs.writeFile(configPath, data, callback); + + }); }, diff --git a/package.json b/package.json index cbdfb156..302081f1 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "bootable": "^0.2.3", "bootable-environment": "^0.2.0", "chalk": "^0.5.1", + "chance": "^0.7.3", "commander": "^2.2.0", "compression": "^1.0.6", "connect": "^3.1.1", diff --git a/boot/config.js b/templates/boot/config.js similarity index 65% rename from boot/config.js rename to templates/boot/config.js index d5e37bff..e871893f 100644 --- a/boot/config.js +++ b/templates/boot/config.js @@ -2,6 +2,7 @@ // # config var path = require('path'); +var autoprefixer = require('autoprefixer-core'); var parentDir = path.join(__dirname, '..'); var appDir = path.join(parentDir, 'app'); @@ -17,7 +18,7 @@ var maxAge = 24 * 60 * 60 * 1000; exports = module.exports = function() { - return { + var config = { defaults: { basicAuth: { @@ -82,8 +83,8 @@ exports = module.exports = function() { messageFormat: 'text' }, session: { - secret: 'igloo-change-me', - key: 'igloo', + secret: '<%= chance.string({length: 130}) %>', + key: '<%= _.slugify(name) %>', cookie: { maxAge: maxAge }, @@ -108,7 +109,7 @@ exports = module.exports = function() { options: {} } }, - cookieParser: 'igloo-change-me', + cookieParser: '<%= chance.string({length: 130}) %>', csrf: { enabled: true, options: { @@ -149,7 +150,12 @@ exports = module.exports = function() { less: { path: publicDir, options: { - force: true + force: true, + postprocess: { + css: function(css, req) { + return autoprefixer.process(css).css; + } + } } }, jade: { @@ -169,8 +175,12 @@ exports = module.exports = function() { env: 'test', port: 5000 }, + mongo: { + dbname: '<%= _.slugify(name) %>_test', + db: '<%= _.slugify(name) %>_test' // keep for winston logger + }, redis: { - prefix: 'igloo_test' + prefix: '<%= _.slugify(name) %>_test', }, logger: { 'console': false, @@ -180,14 +190,14 @@ exports = module.exports = function() { development: { cache: true, - url: 'http://localhost:3000', + url: 'http://<%= _.slugify(name) %>-dev.clevertech.biz', server: { env: 'development', port: 3000, }, mongo: { - dbname: 'igloo-development', - db: 'igloo-development' // keep for winston logger + dbname: '<%= _.slugify(name) %>_development', + db: '<%= _.slugify(name) %>_development' // keep for winston logger }, knex: { debug: true, @@ -195,17 +205,76 @@ exports = module.exports = function() { host: '127.0.0.1', user: 'root', password: '', - database: 'igloo_development' + database: '<%= _.slugify(name) %>_development' } }, redis: { - prefix: 'igloo-development' + prefix: '<%= _.slugify(name) %>_development' + } + }, + + staging: { + cache: true, + url: 'http://<%= _.slugify(name) %>-stag.clevertech.biz', + password: { + minStrength: 1, + limitAttempts: true + }, + views: { + dir: path.join(assetsDir, 'dist'), + }, + publicDir: path.join(assetsDir, 'dist'), + showStack: false, + updateNotifier: { + enabled: false, + }, + server: { + env: 'staging', + port: 3080, + cluster: true + }, + mongo: { + dbname: '<%= _.slugify(name) %>_staging', + db: '<%= _.slugify(name) %>_staging' // keep for winston logger + }, + knex: { + connection: { + host: '127.0.0.1', + user: 'root', + password: '', + database: '<%= _.slugify(name) %>_staging' + } + }, + redis: { + prefix: '<%= _.slugify(name) %>_staging' + }, + output: { + colorize: false + }, + logger: { + 'console': true, + requests: true, + mongo: false, + file: false + /* + // + file: { + filename: '/var/log/igloo.log', + // TODO: maxsize + // TODO: maxFiles + timestamp: true + } + */ + }, + s3: { + bucket: 'requidity-stag' } }, production: { cache: true, - url: 'http://localhost:3080', + // FIXME + url: 'http://<%= _.slugify(name) %>-prod.clevertech.biz', password: { minStrength: 1, limitAttempts: true @@ -224,19 +293,19 @@ exports = module.exports = function() { cluster: true }, mongo: { - dbname: 'igloo-production', - db: 'igloo-production' // keep for winston logger + dbname: '<%= _.slugify(name) %>_production', + db: '<%= _.slugify(name) %>_production' // keep for winston logger }, knex: { connection: { host: '127.0.0.1', user: 'root', password: '', - database: 'igloo_production' + database: '<%= _.slugify(name) %>_production' } }, redis: { - prefix: 'igloo_production' + prefix: '<%= _.slugify(name) %>_production' }, output: { colorize: false @@ -260,6 +329,8 @@ exports = module.exports = function() { }; + return config; + }; exports['@singleton'] = true; From e8d98c4851e469ab417e9868ee71fa0f61203b00 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:31:20 +0300 Subject: [PATCH 4/8] update .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d1f06eee..a0518ce7 100644 --- a/.gitignore +++ b/.gitignore @@ -103,9 +103,11 @@ dwsync.xml # ------------------------------------------------------------------------------ assets/bower/ assets/dist/ -bower_components/ assets/public/css/*.css +assets/public/css/maps/ assets/public/bower/ +assets/public/fonts/font-awesome/ +bower_components/ .bower-cache/ .bower-registry/ .bower-tmp/ From c62aa69e839fb766af5b5fefad75ef4911be657c Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:39:17 +0300 Subject: [PATCH 5/8] add option to disable less middleware for dev environment by default it's useful in case of using `gulp watch`, if you want to get working sourcemaps current version of less-middleware has a few issues with sourcemaps --- etc/init/02-middleware.js | 6 ++++-- templates/boot/config.js | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/etc/init/02-middleware.js b/etc/init/02-middleware.js index 4a2fe8be..4be6f327 100644 --- a/etc/init/02-middleware.js +++ b/etc/init/02-middleware.js @@ -23,8 +23,10 @@ exports = module.exports = function(IoC, logger, settings, policies) { if (settings.server.env === 'development') { - // less middleware - app.use(lessMiddleware(settings.less.path, settings.less.options)); + if (settings.less.enabled) { + // less middleware + app.use(lessMiddleware(settings.less.path, settings.less.options)); + } // jade-amd templates app.use(settings.jade.amd.path, jadeAmd.jadeAmdMiddleware(settings.jade.amd.options)); diff --git a/templates/boot/config.js b/templates/boot/config.js index e871893f..f21f0c54 100644 --- a/templates/boot/config.js +++ b/templates/boot/config.js @@ -148,6 +148,7 @@ exports = module.exports = function() { slack: false }, less: { + enabled: true, path: publicDir, options: { force: true, From 9e89b8304e6a7711e4d5074773cc6f305ec92205 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:41:24 +0300 Subject: [PATCH 6/8] update package.json for config - add autoprefixer-core dependency for less-middleware --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 302081f1..7fcb412e 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "homepage": "https://github.com/niftylettuce/eskimo", "dependencies": { "async": "^0.9.0", + "autoprefixer-core": "^5.1.5", "basic-auth": "^1.0.0", "body-parser": "^1.3.0", "bootable": "^0.2.3", From 4f534750a5b100237f03befb8fd59e5ff05fea03 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 00:50:17 +0300 Subject: [PATCH 7/8] move liveReload to local.js config We usually use `nodemon app` for running application on dev server, so it causes liveReload connection error. That's why I moved it to local.js. --- boot/local.js | 6 ++++++ etc/init/03-sessions.js | 2 +- templates/boot/config.js | 3 --- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/boot/local.js b/boot/local.js index ff55f4f9..efc9f9a4 100644 --- a/boot/local.js +++ b/boot/local.js @@ -22,6 +22,12 @@ exports = module.exports = function() { pass: 'abc123' } } + }, + // less: { + // enabled: false // disable less middleware, if you use gulp watch + // }, + liveReload: { + port: 35729 } }; }; diff --git a/etc/init/03-sessions.js b/etc/init/03-sessions.js index 83991f94..9684d014 100644 --- a/etc/init/03-sessions.js +++ b/etc/init/03-sessions.js @@ -28,7 +28,7 @@ exports = module.exports = function(IoC, settings, sessions, User, policies) { // support live reload // (note this must come after sessions) // - if (settings.server.env === 'development') + if (settings.server.env === 'development' && settings.liveReload) app.all(policies.notApiRouteRegexp, connectLiveReload(settings.liveReload)); // add support for authentication diff --git a/templates/boot/config.js b/templates/boot/config.js index f21f0c54..c2315126 100644 --- a/templates/boot/config.js +++ b/templates/boot/config.js @@ -164,9 +164,6 @@ exports = module.exports = function() { path: '/js/tmpl/', options: {} } - }, - liveReload: { - port: 35729 } }, From 349d0f2ac82a1d730d067de1bd7cfcbfa4a38076 Mon Sep 17 00:00:00 2001 From: Alexander Bykhov Date: Sat, 21 Feb 2015 01:15:28 +0300 Subject: [PATCH 8/8] remove a typo --- bin/eskimo.js | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/eskimo.js b/bin/eskimo.js index 826f3c5b..462f10c5 100755 --- a/bin/eskimo.js +++ b/bin/eskimo.js @@ -193,7 +193,6 @@ function create(dirname) { chance: new Chance() }); - fs.writeFile(readmePath, data, callback); fs.writeFile(configPath, data, callback); });