使Rails管道对XML资产进行gzip压缩

3
我正在使用Rails资产管道来构建我的网站。assets:precompile任务会自动处理和创建gzip版本的css和js文件。
现在我添加了一些xml资产。资产管道允许我像处理二进制文件(如图片)一样引用这些文件。但是,即使我明确将它们放在“config.assets.precompile”中,预编译任务也不会为xml文件创建gzip版本。我的xml文件是大型资产,使用gzip可以提高3倍速度,因此这对我的网站是一个重要的优化。有没有办法配置管道以gzip附加扩展名(如“.xml”)的文件?
注:
我正在使用asset_sync gem将所有静态资源移动到CloudFront CDN,因此我不能依赖我的web服务器(NGINX)自动为我压缩文件。如果asset-pipeline创建了一个文件的gzipped版本,asset_sync将上传它,但它不会为您创建gzipped版本。理论上,我可以fork asset_sync并在上传之前gzip xml文件或在precompile和sync任务之间插入一个额外的任务,但我更喜欢避免维护gem的fork。
我还考虑过通过使用.js扩展名而不是.xml来欺骗资产管道,但我更喜欢不那么hacky的解决方案。
如果没有干净的方法可以配置gzip以针对其他文件类型,是否有一种方法可以添加自定义“后处理”过滤器来手动添加gzip?我看到过如何添加自定义预处理器的指南,但没有关于最终散列资产文件的后处理器。

查看Sprockets in Rails 3.2中的write_asset方法,GZIPing仅硬编码为JS和CSS文件。在预编译资产之前,您可以运行脚本手动压缩XML文件吗? - mccannf
感谢您向我展示write_asset代码。我无法预先压缩xml文件,因为这样.xml和.xml.gz将被视为两个不同的资源,并且会分别进行哈希处理以进行缓存。因此,在预编译之后并在同步到CloudFront之前,我必须执行gzip操作。 - nycuser
1
哦,你不需要分叉整个 asset_sync gem 库,你可以创建一个新的 rake 任务(就像 asset_sync 库中的一个这样的任务),并在 AssetSync.sync 命令之前添加自己的帮助程序来 gzip 化你的 xml 资源。 - mccannf
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接