FIX: Fallback to gzip compression if brotli isn't supported (#7895)
This commit is contained in:
parent
7890f10693
commit
eff1c19e3b
|
@ -58,6 +58,10 @@ module ApplicationHelper
|
|||
request.env["HTTP_ACCEPT_ENCODING"] =~ /br/
|
||||
end
|
||||
|
||||
def is_gzip_req?
|
||||
request.env["HTTP_ACCEPT_ENCODING"] =~ /gzip/
|
||||
end
|
||||
|
||||
def script_asset_path(script)
|
||||
path = asset_path("#{script}.js")
|
||||
|
||||
|
@ -77,6 +81,8 @@ module ApplicationHelper
|
|||
|
||||
if is_brotli_req?
|
||||
path = path.gsub(/\.([^.]+)$/, '.br.\1')
|
||||
elsif is_gzip_req?
|
||||
path = path.gsub(/\.([^.]+)$/, '.gz.\1')
|
||||
end
|
||||
|
||||
elsif GlobalSetting.cdn_url&.start_with?("https") && is_brotli_req?
|
||||
|
|
|
@ -54,6 +54,12 @@ describe ApplicationHelper do
|
|||
expect(link).to eq("<link rel='preload' href='https://s3cdn.com/assets/application.js' as='script'/>\n<script src='https://s3cdn.com/assets/application.js'></script>")
|
||||
end
|
||||
|
||||
it "can fall back to gzip compression" do
|
||||
helper.request.env["HTTP_ACCEPT_ENCODING"] = 'gzip'
|
||||
link = helper.preload_script('application')
|
||||
expect(link).to eq("<link rel='preload' href='https://s3cdn.com/assets/application.gz.js' as='script'/>\n<script src='https://s3cdn.com/assets/application.gz.js'></script>")
|
||||
end
|
||||
|
||||
it "gives s3 cdn even if asset host is set" do
|
||||
set_cdn_url "https://awesome.com"
|
||||
link = helper.preload_script('application')
|
||||
|
|
|
@ -120,6 +120,28 @@ describe StaticController do
|
|||
end
|
||||
end
|
||||
|
||||
context '#cdn_asset' do
|
||||
let (:site) { RailsMultisite::ConnectionManagement.current_db }
|
||||
|
||||
it 'can serve assets' do
|
||||
begin
|
||||
assets_path = Rails.root.join("public/assets")
|
||||
|
||||
FileUtils.mkdir_p(assets_path)
|
||||
|
||||
file_path = assets_path.join("test.js.br")
|
||||
File.write(file_path, 'fake brotli file')
|
||||
|
||||
get "/cdn_asset/#{site}/test.js.br"
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(response.headers["Cache-Control"]).to match(/public/)
|
||||
ensure
|
||||
File.delete(file_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context '#show' do
|
||||
before do
|
||||
post = create_post
|
||||
|
|
Loading…
Reference in New Issue