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/
|
request.env["HTTP_ACCEPT_ENCODING"] =~ /br/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_gzip_req?
|
||||||
|
request.env["HTTP_ACCEPT_ENCODING"] =~ /gzip/
|
||||||
|
end
|
||||||
|
|
||||||
def script_asset_path(script)
|
def script_asset_path(script)
|
||||||
path = asset_path("#{script}.js")
|
path = asset_path("#{script}.js")
|
||||||
|
|
||||||
|
@ -77,6 +81,8 @@ module ApplicationHelper
|
||||||
|
|
||||||
if is_brotli_req?
|
if is_brotli_req?
|
||||||
path = path.gsub(/\.([^.]+)$/, '.br.\1')
|
path = path.gsub(/\.([^.]+)$/, '.br.\1')
|
||||||
|
elsif is_gzip_req?
|
||||||
|
path = path.gsub(/\.([^.]+)$/, '.gz.\1')
|
||||||
end
|
end
|
||||||
|
|
||||||
elsif GlobalSetting.cdn_url&.start_with?("https") && is_brotli_req?
|
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>")
|
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
|
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
|
it "gives s3 cdn even if asset host is set" do
|
||||||
set_cdn_url "https://awesome.com"
|
set_cdn_url "https://awesome.com"
|
||||||
link = helper.preload_script('application')
|
link = helper.preload_script('application')
|
||||||
|
|
|
@ -120,6 +120,28 @@ describe StaticController do
|
||||||
end
|
end
|
||||||
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
|
context '#show' do
|
||||||
before do
|
before do
|
||||||
post = create_post
|
post = create_post
|
||||||
|
|
Loading…
Reference in New Issue