在Heroku上关闭Rails 3.1资产管道中图像资产指纹识别?

4
因为我在应用程序中使用的一个 jQuery 插件直接引用了图片,所以我试图关闭资产指纹。
因此,在我的 production.rb 中设置 config.assets.digest = false,但现在我的所有图片引用都无法工作。 /assets/foo.png 只返回空响应。
我真的不想改变 jQuery 插件的代码并添加 erb 图片帮助程序,但我不确定还能做什么。 而且,对于图片的资产指纹似乎带来的麻烦远大于它的价值。
有人有任何见解吗?
谢谢!

你重新预编译了你的资产吗?rake assets:precompile - cailinanne
2个回答

3

有人为此制作了一个gem:

https://github.com/spohlenz/digestion

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

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


哦,这是个好主意。我稍后会研究一下。谢谢! - Adam Albrecht
该宝石的功能已被合并到Rails中。 - Richard Hulse
@Richard Hulse:你能详细说明一下吗? - Craig Walker
1
在 Rails 3.1.3+ 中,Rails 资产会被编译为带或不带摘要,并且辅助方法允许您在生产环境中关闭使用带指纹的文件名。 - Richard Hulse

1

如果您正在使用像ckeditor这样的大型插件,那么您唯一的选择就是将该插件移动到公共目录中。

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

管道确实很有价值。在生产环境中不使用摘要几乎抵消了使用它的意义,即设置远期标头以使资产在某个地方缓存。

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


我刚刚将插件的图像移动到公共目录中的它们自己的文件夹中。这样,我可以为所有其他资产保留摘要。我确实认为资产管道对于CSS和Javascript非常有用,但我仍然不确定它对于图像的有用性。 - Adam Albrecht
1
图像的实用性 - 特别是在CSS中或经常访问的图像 - 是它们被指纹识别,因此可以设置远期标头。如果您对每个页面都有的公司标志或CSS背景精灵进行此操作,这些内容将被缓存。经常访问者可能会在本地或边界缓存中访问该图像,从而节省下载时间并加快浏览体验。 - Richard Hulse

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