summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMike Greiling <mike@pixelcog.com>2017-06-28 21:57:35 -0500
committerMike Greiling <mike@pixelcog.com>2017-06-28 22:26:16 -0500
commit3137b886b84e2c3670b305a8194a3532afe541be (patch)
tree60a567b30ca001e9658076d534c90dfc4f17f9c3 /app
parent5b43aa955737f002be3d197c9f7b4d3374d0ad69 (diff)
downloadgitlab-ce-3137b886b84e2c3670b305a8194a3532afe541be.tar.gz
configure webpack publicPath dynamically to account for CDN or relative path settings
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/webpack.js12
-rw-r--r--app/helpers/webpack_helper.rb23
2 files changed, 20 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