diff --git a/services/web/app/src/infrastructure/Server.js b/services/web/app/src/infrastructure/Server.js index acc57003c5..6a9d36f8b9 100644 --- a/services/web/app/src/infrastructure/Server.js +++ b/services/web/app/src/infrastructure/Server.js @@ -29,6 +29,7 @@ const RedirectManager = require('./RedirectManager') const ProxyManager = require('./ProxyManager') const translations = require('translations-sharelatex').setup(Settings.i18n) const Modules = require('./Modules') +const Views = require('./Views') const ErrorController = require('../Features/Errors/ErrorController') const HttpErrorController = require('../Features/Errors/HttpErrorController') @@ -168,6 +169,7 @@ expressLocals(webRouter, privateApiRouter, publicApiRouter) if (app.get('env') === 'production') { logger.info('Production Enviroment') app.enable('view cache') + Views.precompileViews(app) } webRouter.use(function(req, res, next) { diff --git a/services/web/app/src/infrastructure/Views.js b/services/web/app/src/infrastructure/Views.js index 01eb2f1d9b..f3c250bcf7 100644 --- a/services/web/app/src/infrastructure/Views.js +++ b/services/web/app/src/infrastructure/Views.js @@ -1,55 +1,23 @@ const logger = require('logger-sharelatex') const pug = require('pug') +const globby = require('globby') -// List of view names found with -// -// git grep res.render | perl filter.pl | sort -u -// -// where filter.pl is the perl script below. -// -// #!/usr/bin/perl -// while (<>) {print "'$1',\n" if /render\(\'(.*?)\'/;} +// Generate list of view names from app/views + +const viewList = globby + .sync('**/*.pug', { + onlyFiles: true, + concurrency: 1, + ignore: '**/_*.pug', + cwd: 'app/views' + }) + .map(x => { + return x.replace(/\.pug$/, '') // strip trailing .pug extension + }) + .filter(x => { + return !/^_/.test(x) + }) -const viewList = [ - 'admin/index', - 'admin/register', - 'beta_program/opt_in', - 'blog/blog_holder', - 'external/home/sl', - 'external/home/v2', - 'general/404', - 'general/500', - 'general/closed', - 'project/cannot-import-v1-project', - 'project/editor', - 'project/importing', - 'project/invite/not-valid', - 'project/invite/show', - 'project/list', - 'project/v2-import', - 'referal/bonus', - 'subscriptions/canceled_subscription', - 'subscriptions/dashboard', - 'subscriptions/new', - 'subscriptions/successful_subscription', - 'subscriptions/team/invite', - 'subscriptions/upgradeToAnnual', - 'sudo_mode/sudo_mode_prompt', - 'user/activate', - 'user/confirm_email', - 'user/login', - 'user/logout', - 'user_membership/index', - 'user_membership/new', - 'user/one_time_login', - 'user/passwordReset', - 'user/reconfirm', - 'user/register', - 'user/restricted', - 'user/sessions', - 'user/setPassword', - 'user/settings' -] module.exports = { precompileViews(app) { let startTime = Date.now() @@ -62,7 +30,7 @@ module.exports = { logger.log({ view }, 'compiled') success++ } catch (err) { - logger.error({ view, err }, 'error compiling') + logger.error({ view, err: err.message }, 'error compiling') failures++ } })