如何在Heroku Cedar上为静态机架站点启用gzip压缩?

如何在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时,它报告没有任何文件

在本文之后,我在Heroku上获得了一个静态站点,其
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