如何在Rails 4.2中启用gzip文件创建?

时间:2015-05-15 14:17:55

标签: ruby-on-rails ruby gzip sprockets gz

截至2015年4月14日,看起来.gz文件编译已从最新版本的Rails中的链接中删除。

https://github.com/rails/sprockets/issues/26

我在S3服务器上使用这些文件来加速页面加载,但由于gzip文件的编译已经被上述线程删除了,因此我脑海中浮现出一个大问题。如果您使用的是资产主机,那么编译.gz文件的新解决方案是什么?如果我从我的服务器提供文件,这将相对容易,但静态资产托管在其他地方,需要预编译。

无论如何,希望有人想出这个。我的临时解决方案,如果我无法获得资产管道来生成和上传.gz文件就像使用grunt-contrib-compress(https://github.com/gruntjs/grunt-contrib-compress)手动创建它们一样。但是我们都知道手动解决方案不能很好地扩展,我宁愿让资产管道在部署时处理这个问题。

非常感谢你的帮助。 :)

1 个答案:

答案 0 :(得分:1)

由于Rake不会覆盖但链接任务,您可以声明另一个assets:precompile。以下解决方案应该可以在不更改任何部署脚本的情况下运行:

#/lib/tasks/assets.rake
namespace :assets do
  # We make use of rake's behaviour and chain this after rails' assets:precompile.
  desc 'Gzip assets after rails has finished precompilation'
  task :precompile do
    Dir['public/assets/**/*.{js,css}'].each do |path|
      gz_path = "#{path}.gz"
      next if File.exist?(gz_path)

      Zlib::GzipWriter.open(gz_path) do |gz|
        gz.mtime = File.mtime(path)
        gz.orig_name = path
        gz.write(IO.binread(path))
      end
    end
  end
end