【问题标题】:Rails not serving compressed SVG filesRails 不提供压缩的 SVG 文件
【发布时间】:2017-04-30 20:53:42
【问题描述】:

我一直在使用 Google PageSpeed 来优化我的 Rails 5.0 应用程序,特别是 SVG 出现了一些奇怪的东西。我使用Rack::Deflate 来压缩静态资产,像这样......

config/application.rb

config.middleware.use Rack::Deflater

...然而,Google PageSpeed 仍然抱怨提供未压缩的 SVG。

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

但是,Google PageSpeed仍然抱怨提供未压缩的资产。

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

是否需要在此处调整某种配置才能正确提供压缩的 SVG 文件?

【问题讨论】:

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


【解决方案1】:

我开始discussion 讨论如何全面解决此问题,因为这似乎也会影响 sprockets 将压缩但 ActionDispatch::Static 无法使用的字体和 json 文件。无论如何,这是通过猴子补丁(放入初始化程序)的解决方案:

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

【讨论】:

  • 您提到您开始讨论如何全面解决此问题。您能否在此处添加该讨论的链接?
  • @nnc 感谢您的提醒!讨论在github
【解决方案2】:

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

【讨论】: