Rails在预编译期间将图像名称移动到/ public / assets目录时为图像名称添加了md5哈希。问题是这些哈希值是不可预测的,所以我怎么知道在尝试链接它们时会调用它们?
例如,如果我正在托管名为flowers.jpg的图片,然后尝试在www.mysite.com/flowers.jpg上访问它,则会失败,因为该文件已重命名为flowers-4182172ae014ec23dc02739229c08dcc。
我知道Rails有帮助器会自动找到这些图像。但是,如果您尝试从完全不同的网站或应用程序链接到这些图像,该怎么办?有没有办法让Rails说,“好吧,我找不到flowers.jpg的预编译版本,所以我不会从/ app / assets服务/ public / assets服务。”?
编辑:根据这篇文章(http://stackoverflow.com/questions/10045892/rails-compiles-assets-both-with-and-without-md5-hash-why),Rails应该编译一个版本的我的资产有和没有md5哈希?知道为什么我的Rails副本没有生成没有指纹的版本吗?
答案 0 :(得分:0)
Rails使用image_tag为您处理:
image_tag "myimage.jpg"
这将为您提供正确的网址。您可以编写一个小型服务,为您的as(未经测试)生成图像URL:
Class AssetsService < ApplicationController
def index
end
end
index.js.haml
= image_tag "myimage.jpg"
答案 1 :(得分:0)
答案不是Rails。我不认为Rails是假设来编译没有指纹的图像。然而,它应该仍然可以为它们提供服务,并且我已经在我的nginx配置文件中添加了一些代码,以防止这种情况发生。这是违法的代码:
location ~* ^/assets/ {
# Per RFC2616 - 1 year maximum expiry
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
expires 1y;
add_header Cache-Control public;
# Some browsers still send conditional-GET requests if there's a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
add_header Last-Modified "";
add_header ETag "";
break;
}