Rails 3.1资产在生产中被指纹识别,但是HTML不是

时间:2011-09-14 01:15:14

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline fingerprinting

一切都在发展中很有效。而且应用程序与Capistrano一样正常部署。资产(javascript和css)似乎是完全预编译的,并且每个资产和图像都被赋予“指纹”。问题是在我的视图中使用image_tag("image-name.png")时,它在生产中创建的html不包含“指纹”。

我们在制作中获得的HTML:

<img alt="Image-name" src="/assets/image-name.png" />

而不是我所期望的应该是:

<img alt="Image-name" src="/assets/image-name-b89cae2830c2901f844c353b3f3942fe.png" />

那么Rails 3.1的无数配置选项中的哪一个我们拙劣?

修改

麻烦的图像似乎是我们使用的第三方Colorbox图像查看工具中包含的图像。 Rails 3.1指纹识别其资产(border.png等),但很明显,这个javascript库的源代码不使用像image_tag这样的帮助程序。所以在制作中它仍然在寻找名为/assets/colorbox/border.png的图像。目前图像位于/ vendor / assets / images中,在开发中工作正常。 有没有办法阻止这些图像被“指纹识别”?

1 个答案:

答案 0 :(得分:1)

嗯,这就是我如何破解第三方文件以使其有效:

违规图片位于vendor/assets/stylesheets/colorbox.css等文件中。我首先将文件的扩展名更改为.scss,然后将每个url(colorbox/image.png)更改为image_url("color box/image.png"),现在一切都很好。资产通常在开发中提供,并在生产中进行指纹识别。

仍然希望看到添加第三方(供应商)javascript库的“正确”方式&amp; css到Rails 3.1应用程序。 Rails团队必须预见到不需要编辑的插件解决方案吗?!?所以,请随意提供其他解决方案。


旁白:我之前手动配置我的Capistrano配方:

run "cd #{release_path}; RAILS_ENV=production bundle exec rake assets:precompile"

...及其随附的after deploy:update_code …。我现在删除了这些行,而是将load 'deploy/assets添加到我的Capfile。我不认为这会对上述问题产生任何影响,但我还是想记录它,因为在Capistrano 2.8中不再需要添加自己的管道预编译配方,就像在3.1rc天那样。