【问题标题】:How can I enable gzip file creation in Rails 4.2?如何在 Rails 4.2 中启用 gzip 文件创建?
【发布时间】:2015-11-17 15:27:21
【问题描述】:

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

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

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

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

非常感谢您的帮助。 :)

【问题讨论】:

  • You could write a rake task for that 并在预编译资产后在部署期间触发它。应该不会太不同,就像您将其构建到资产管道中一样。这可以接受吗?
  • 可能,我正在与该线程上的几个人聊天,试图找出一种将他们建议的命令与rake assets:precompile 联系起来的方法。感谢您的建议,我们将看看这是什么结果。 :)

标签: ruby-on-rails ruby sprockets gzip


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多