如何在Heroku Cedar上为静态机架站点启用gzip压缩?
在本文之后,我在Heroku上获得了一个静态站点,其如何在Heroku Cedar上为静态机架站点启用gzip压缩?,heroku,gzip,rack,deflate,cedar,Heroku,Gzip,Rack,Deflate,Cedar,在本文之后,我在Heroku上获得了一个静态站点,其config.ru如下所示: 使用Rack::Static, :URL=>[“/images”、“/js”、“/css”], :root=>“public” 运行lambda{| env| [ 200, { '内容类型'=>'文本/html', “缓存控制”=>“公共,最大年龄=86400” }, File.open('public/index.html',File::RDONLY) ] } 当我在结果上运行YSlow时,它报告没有任何文件
config.ru
如下所示:
使用Rack::Static,
:URL=>[“/images”、“/js”、“/css”],
:root=>“public”
运行lambda{| env|
[
200,
{
'内容类型'=>'文本/html',
“缓存控制”=>“公共,最大年龄=86400”
},
File.open('public/index.html',File::RDONLY)
]
}
当我在结果上运行YSlow时,它报告没有任何文件被gzip压缩。如何压缩资产和public/index.html
?从我的带有链轮、Sinatra和Rack::Deflater
的产品中,我非常确定我只是另一个使用Rack::Deflater
的产品线
我将config.ru
更改为:
使用Rack::Static,
:URL=>[“/images”、“/js”、“/css”],
:root=>“public”
使用Rack::Deflater
运行lambda#…与问题中相同
我能够验证是否发送了Gzip响应:
$curl-H'接受编码:gzip'http://localhost:9292 |文件-
/dev/stdin:gzip压缩数据
但不适用于/css
、/js
或/images
下的静态资产:
$ curl -H 'Accept-Encoding: gzip' http://localhost:9292/css/bootstrap.min.css | file -
/dev/stdin: ASCII English text, with very long lines
这时我意识到这是一个标准的中间件堆栈Rack::Static调用静态文件,从而跳过了下面的堆栈!这就是为什么它适用于public/index.html
,但不适用于资产
以下config.ru
工作正常(注意use Rack::Deflater
现在位于use Rack::Static
之前):
使用Rack::Deflater
使用Rack::Static,
:URL=>[“/images”、“/js”、“/css”],
:root=>“public”
运行lambda{| env|
[
200,
{
'内容类型'=>'文本/html',
“缓存控制”=>“公共,最大年龄=86400”
},
File.open('public/index.html',File::RDONLY)
]
}
经核实:
$curl-H'接受编码:gzip'http://localhost:9292/css/bootstrap.min.css |文件-
/dev/stdin:gzip压缩数据,来自Unix