【问题标题】:Rails 3.1 Asset Pipeline - turn off image asset fingerprinting on Heroku?Rails 3.1 Asset Pipeline - 关闭 Heroku 上的图像资产指纹识别?
【发布时间】:2011-11-14 14:30:39
【问题描述】:

因为我在应用程序中使用的 jQuery 插件直接引用了图像,所以我正在尝试关闭资产指纹识别。

所以我在我的 production.rb 中设置了config.assets.digest = false,但现在我的图像引用都不起作用。 /assets/foo.png 只是返回一个空白响应。

我真的不想更改 jQuery 插件的代码并添加 erb 图像助手,但我不确定还能做什么。坦率地说,图像的资产指纹识别似乎比它的价值要麻烦得多。

有人有什么见解吗?

谢谢!

【问题讨论】:

  • 您是否重新预编译了您的资产? rake assets:precompile?

标签: ruby-on-rails ruby-on-rails-3 heroku ruby-on-rails-3.1 asset-pipeline


【解决方案1】:

有人为此制作了宝石:

https://github.com/spohlenz/digestion

资产管道是 Rails 3.1 的一个很棒的新组件。然而它 有一个称为指纹识别的功能,它使得不可能 正确地合并了许多流行的 JavaScript 库(包括 TinyMCE、CKEditor 和 FancyZoom 仅举几例)进入资产 管道。

此 gem 修补资产管道以允许这些库 使用,通过禁用特定文件的指纹识别功能 或路径。

【讨论】:

  • 哦,这是个好主意。我稍后会调查这个。谢谢!
  • 该 gem 的功能已合并到 Rails 中。
  • @Richard Hulse:你能详细说明一下吗?
  • 在 Rails 3.1.3+ 中,rails 资产在编译时使用和不使用摘要,辅助方法允许您在生产中使用指纹文件名关闭。
【解决方案2】:

如果您使用的是大型插件,例如 ckeditor,那么您唯一真正的选择就是将该插件移至公共目录。

对于较小的插件,您可以将其图像移动到正确的资产路径中。例如,如果您的插件在插件文件夹下引用 images/icon.jpg,则需要将其移动到类似 app/assets/images/plugin_name/icon.png 的位置,然后在插件中使用 <%= asset_tag('plugin_name/icon.png') %> 引用。

管道是值得的。在生产中不使用摘要几乎完全否定了使用它的意义,即设置远期标头,以便资产缓存在某处。

如果您要删除摘要,则必须预编译资产(以便 Sprockets 不会为它们提供远期标头),并确保在服务器上未设置标头。

【讨论】:

  • 我只是将插件的图像移动到公共目录中他们自己的文件夹中。这样,我可以保留所有其他资产的摘要。我确实认为资产管道对 CSS 和 Javascript 非常有用,但我仍然不相信它对图像的有用性。
  • 图像的用处——尤其是 CSS 中或经常访问的图像——是它们被指纹识别,因此可以设置未来的标题。如果您使用每个页面上的公司徽标或 CSS 背景精灵来执行此操作,这些将被缓存。经常访问者可能会在本地或在边界缓存中访问该图像,从而节省下载并加快他们的浏览体验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2013-04-27
相关资源
最近更新 更多