Rails不提供压缩的SVG文件

时间:2017-04-30 20:53:43

标签: ruby-on-rails svg compression asset-pipeline assets

我一直在使用Google PageSpeed来优化我的Rails 5.0应用程序,特别是SVG的奇怪之处。我使用Rack::Deflate压缩静态资产,如此......

配置/ application.rb中

config.middleware.use Rack::Deflater

...然而谷歌PageSpeed却抱怨正在服务的未压缩SVG。

我认为这很奇怪,所以我添加了一些code来手动压缩SVG作为资产预编译的一部分。这很有效,我可以去http://myapp.com/sample_image.svg.gz,实际上我得到了压缩的图像文件。

但是,Google PageSpeed 仍在抱怨所投放的未压缩资产。

看起来,就像Rails 5.0不是压缩我的SVG一样,当我手动压缩它们时,它仍然不会提供它们。

我需要在这里调整某种配置才能正确提供压缩的SVG文件吗?

2 个答案:

答案 0 :(得分:2)

我开始discussion关于如何以全面的方式解决这个问题,因为这似乎也影响了字体&链轮将压缩的json文件,但ActionDispatch :: Static不会服务。无论如何,这是一个通过monkeypatch(放入初始化器)的解决方案:

require 'action_dispatch/middleware/static'

ActionDispatch::FileHandler.class_eval do
  private

    def gzip_file_path(path)
      return false if ['image/png', 'image/jpeg', 'image/gif'].include? content_type(path)
      gzip_path = "#{path}.gz"
      if File.exist?(File.join(@root, ::Rack::Utils.unescape_path(gzip_path)))
        gzip_path
      else
        false
      end
    end
end

答案 1 :(得分:1)

Rails 6.1 仍然如此。我已经做了一个 PR 来解决这个问题:https://github.com/rails/rails/pull/42407