Ruby 我如何使用zlib创建GZIP静态资源?

Ruby 我如何使用zlib创建GZIP静态资源?,ruby,sinatra,gzip,zlib,Ruby,Sinatra,Gzip,Zlib,编辑:我正在使用Ruby和Sinatra 更新:这是我正在使用的代码,它不起作用 get '/' do session[:time] = Time.now z = Zlib::Deflate.new(6, 31) z.deflate(File.read('public/Assets/Styles/build.css')) z.flush z.finish z.close erb :home end …我没有任何错误。但当我通过Firebu

编辑:我正在使用Ruby和Sinatra

更新:这是我正在使用的代码,它不起作用

get '/' do
    session[:time] = Time.now
    z = Zlib::Deflate.new(6, 31)
    z.deflate(File.read('public/Assets/Styles/build.css'))
    z.flush
    z.finish
    z.close
    erb :home
end
…我没有任何错误。但当我通过Firebug的Yslow插件检查该文件时,它告诉我该文件没有GZIP'ed

我试图理解我是如何使用
zlib
来处理网页内容和静态文件,如JavaScript和CSS的


我知道我可以将字符串数据传递给
Zlib::Deflate.Deflate
,但我正在使用Sinatra和ERB文件。那么,我是否要传入ERB文件和Js/CSS文件的路径?或者我可以传入存储脚本/样式的目录吗?我是否要传入ERB文件的路径或引用ERB文件的符号?

除非您正在编写自己的HTTP服务器,否则服务器需要处理此问题。客户机首先必须让服务器知道它接受gzip内容编码,然后服务器才能提供gzip内容编码


Zlib::Deflate.Deflate不会生成gzip编码的数据。它将只生成zlib编码的数据。您需要使用windowBits参数等于31的Zlib::Deflate.new来启动gzip流。

好的,所以我应该使用
z=Zlib::Deflate.new(1,31)
,然后我可以使用
z.Deflate(File.read(“path/to/File”)
这是否正确?注意,文档中没有明确说明“level”参数的限制,所以我指定了1,但不知道我要处理的范围是什么?是的。范围为1到9,默认为6。只有在吞吐量有问题并且需要以较低的压缩(值小于6)为代价提高速度时,或者如果您不关心速度并且想要寻找最后一点压缩(值大于9),才应该使用6以外的东西。您还需要关闭放气流,以确保它压缩最后一点。@mark adlert嗨,这对我不起作用。我已经更新了我的问题(见上文)以显示我现在使用的代码,但这似乎不适用于GZIP文件的内容?这不适用(请参见我更新的问题以了解最新的代码)-您将看到我正在使用
刷新
完成
关闭
。那么您希望从哪里获得结果?z、 deflate(…),result=z.finish或result=z.deflate(…,Zlib::finish)将把gzip流放入result中。