【发布时间】:2013-01-09 04:10:35
【问题描述】:
我正在为我的 rails 网站使用 rails 资产管道。 assets:precompile 任务正确处理并自动创建我的 css 和 js 文件的 gzip 版本。
我现在添加了一些 xml 资产。资产管道让我可以引用文件,就像我对图像等二进制文件所做的那样。但是,即使我明确地将它们放在“config.assets.precompile”中,预编译任务也不会创建 xml 文件的 gzip 版本。我的 xml 文件是大型资产,使用 gzip 会快 3 倍,所以这是我网站的重要优化。有什么方法可以将管道配置为带有“.xml”等附加扩展名的 gzip 文件?
注意事项:
我正在使用 assets_sync gem 将我的所有静态资产移动到 CloudFront CDN,所以我不能依赖我的网络服务器(NGINX)来 自动为我压缩文件。 asset_sync 将上传一个 如果资产管道创建了一个文件的 gzip 版本,但它 不会为您创建压缩版本。我理论上可以分叉 asset_sync 并在上传之前将其破解为 gzip xml 文件或 在预编译和同步任务之间插入一个附加任务,但是 我宁愿避免维护 gem 的分支。
我还考虑过使用 .js 来欺骗资产管道 扩展名而不是 .xml,但我更喜欢不那么 hacky 的解决方案。
如果没有干净的方法来仅在附加文件上配置 gzip 类型,有没有办法在文件上添加自定义“后处理”过滤器 我可以在哪里手动添加 gzip?我看过有关如何添加的指南 自定义预处理器,但不是最终散列的后处理器 资产文件。
【问题讨论】:
-
查看Sprockets in Rails 3.2 中的
write_asset方法,GZIPing 仅硬编码为 JS 和 CSS 文件。你能在预编译资产之前运行一个脚本来手动压缩 XML 文件吗? -
感谢您向我展示 write_asset 代码。我无法预压缩 xml 文件,因为这样 .xml 和 .xml.gz 将被视为两个独立的资产,并分别进行哈希处理以进行缓存。所以,我必须在预编译之后和同步到云端之前执行 gzip。
-
嗯。与其分叉整个
asset_syncgem,不如创建一个新的rake 任务like the one from asset_sync,并在AssetSync.sync命令之前添加您自己的自定义帮助程序以压缩您的xml 资产?
标签: ruby-on-rails gzip asset-pipeline