【问题标题】:Get Rails pipeline to gzip xml assets获取到 gzip xml 资产的 Rails 管道
【发布时间】: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_sync gem,不如创建一个新的rake 任务like the one from asset_sync,并在AssetSync.sync 命令之前添加您自己的自定义帮助程序以压缩您的xml 资产?

标签: ruby-on-rails gzip asset-pipeline


【解决方案1】:

此选项已添加到 Rails 4。XML 会自动压缩,Rails 公开了一个配置选项 zip_files,用于指定要压缩的文件类型。

https://github.com/rails/rails/commit/7cfd1bd76a41bea528c945d821a9fbc3902af479

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多