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

标签 ruby-on-rails ruby sprockets gzip

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

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

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

无论如何,希望有人已经解决了这个问题。如果我无法让 Assets 管道像以前那样生成和上传 .gz 文件,我的临时解决方案是使用 grunt-contrib-compress( https://github.com/gruntjs/grunt-contrib-compress ) 手动创建它们。但众所周知,手动解决方案无法很好地扩展,我宁愿让 Assets 管道在部署时处理这一问题。

非常感谢您的帮助。 :)

最佳答案

由于 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

关于ruby-on-rails - 如何在 Rails 4.2 中启用 gzip 文件创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261816/

相关文章:

ruby-on-rails - PHP 的 Ruby APC 模拟?

ruby-on-rails - Rails 3.1.0 Assets 文件夹未呈现:不建议使用Sprockets::Environment#static_root

ruby - Rails4 sprockets ; Assets 逻辑路径没有扩展名

ruby-on-rails - Rails sanitize() 方法有多好?

ruby-on-rails - Rails中的错误模式,提高 “text evaluting to RuntimeError”或提高MyModule::CustomError?

ruby-on-rails - Ruby on Rails : singular resource and form_for

ruby - ARGV 忽略#号

mysql - 将现有数据库和表与 Sinatra 和 Datamapper 一起使用?

ruby-on-rails - 为什么 stylesheet_link_tag 不链接到生产中的/assets ?

ruby-on-rails - 模型内的延迟作业 - 参数数量错误