From 3137b886b84e2c3670b305a8194a3532afe541be Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Wed, 28 Jun 2017 21:57:35 -0500 Subject: configure webpack publicPath dynamically to account for CDN or relative path settings --- app/assets/javascripts/webpack.js | 12 ++++-------- app/helpers/webpack_helper.rb | 23 ++++++++++++++++------- lib/gitlab/gon_helper.rb | 3 +++ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/webpack.js b/app/assets/javascripts/webpack.js index 37420dcafa0..9a9cf395fb8 100644 --- a/app/assets/javascripts/webpack.js +++ b/app/assets/javascripts/webpack.js @@ -1,13 +1,9 @@ /** * This is the first script loaded by webpack's runtime. It is used to manually configure - * config.output.publicPath to account for relative_url_root settings which cannot be baked-in - * to our webpack bundles. + * config.output.publicPath to account for relative_url_root or CDN settings which cannot be + * baked-in to our webpack bundles. */ -if (gon && gon.relative_url_root) { - // this assumes config.output.publicPath is an absolute path - const basePath = gon.relative_url_root.replace(/\/$/, ''); - - // eslint-disable-next-line camelcase, no-undef - __webpack_public_path__ = basePath + __webpack_public_path__; +if (gon && gon.webpack_public_path) { + __webpack_public_path__ = gon.webpack_public_path; // eslint-disable-line } diff --git a/app/helpers/webpack_helper.rb b/app/helpers/webpack_helper.rb index 6bacda9fe75..0386df22374 100644 --- a/app/helpers/webpack_helper.rb +++ b/app/helpers/webpack_helper.rb @@ -11,20 +11,29 @@ module WebpackHelper paths = Webpack::Rails::Manifest.asset_paths(source) if extension - paths = paths.select { |p| p.ends_with? ".#{extension}" } + paths.select! { |p| p.ends_with? ".#{extension}" } end - # include full webpack-dev-server url for rspec tests running locally + force_host = webpack_public_host + if force_host + paths.map! { |p| "#{force_host}#{p}" } + end + + paths + end + + def webpack_public_host if Rails.env.test? && Rails.configuration.webpack.dev_server.enabled host = Rails.configuration.webpack.dev_server.host port = Rails.configuration.webpack.dev_server.port protocol = Rails.configuration.webpack.dev_server.https ? 'https' : 'http' - - paths.map! do |p| - "#{protocol}://#{host}:#{port}#{p}" - end + "#{protocol}://#{host}:#{port}" + else + ActionController::Base.asset_host.try(:chomp, '/') end + end - paths + def webpack_public_path + "#{webpack_public_host}/#{Rails.application.config.webpack.public_path}/" end end diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb index 319633656ff..2d1ae6a5925 100644 --- a/lib/gitlab/gon_helper.rb +++ b/lib/gitlab/gon_helper.rb @@ -2,11 +2,14 @@ module Gitlab module GonHelper + include WebpackHelper + def add_gon_variables gon.api_version = 'v4' gon.default_avatar_url = URI.join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s gon.max_file_size = current_application_settings.max_attachment_size gon.asset_host = ActionController::Base.asset_host + gon.webpack_public_path = webpack_public_path gon.relative_url_root = Gitlab.config.gitlab.relative_url_root gon.shortcuts_path = help_page_path('shortcuts') gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class -- cgit v1.2.1