Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails 4.2中启用gzip文件创建?_Ruby On Rails_Ruby_Sprockets_Gzip - Fatal编程技术网

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

Ruby on rails 如何在Rails 4.2中启用gzip文件创建?,ruby-on-rails,ruby,sprockets,gzip,Ruby On Rails,Ruby,Sprockets,Gzip,截至2015年4月14日,最新版本的Rails似乎已从链轮中删除了.gz文件编译 我在S3服务器上使用了这些文件来加速页面加载,但是由于gzip文件的编译已经按照上面的线程被删除,所以我脑海中浮现出一个大问题。如果您使用的是资产主机,那么编译.gz文件的新解决方案是什么?如果我从我的服务器提供文件,这将相对容易,但静态资产托管在其他地方,需要预编译 无论如何,希望有人能想出这个办法。如果我不能像以前那样让资产管道生成和上传.gz文件,我的临时解决方案是使用grunt-contrib-compr

截至2015年4月14日,最新版本的Rails似乎已从链轮中删除了
.gz
文件编译

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

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


非常感谢您的帮助。:)

由于Rake不覆盖任务,而是链接任务,所以可以声明另一个
资产: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

并在资产预编译后的部署期间触发它。不应该有太大的不同,就好像你要将其构建到资产管道中一样。这可以接受吗?可能,我正在与一些人讨论这个问题,试图找出一种方法,将他们建议的命令绑定到
rake资产:precompile
。谢谢你的建议,我们会看到结果的。:)