2

Rails は、プリコンパイル中に画像を /public/assets ディレクトリに移動するときに、画像名に md5 ハッシュを追加します。問題は、これらのハッシュが予測できないことです。そのため、それらにリンクしようとするときに、それらが何と呼ばれるかをどのように知ることができますか?

たとえば、flowers.jpg という名前の画像をホストしていて、www.mysite.com/flowers.jpg でアクセスしようとすると、ファイルの名前が flowers-4182172ae014ec23dc02739229c08dcc に変更されているため、失敗します。

Rails には、これらの画像を自動的に見つけるヘルパーがあることは知っています。しかし、まったく別の Web サイトやアプリケーションからこれらの画像にリンクしようとしている場合はどうなるでしょうか。Rails に「まあ、プリコンパイルされたバージョンの flowers.jpg が見つからないので、/public/assets から提供する代わりに、/app/assets から提供します」と言う方法はありますか?

編集: この投稿 (http://stackoverflow.com/questions/10045892/rails-compiles-assets-both-with-and-without-md5-hash-why) によると、Rails は両方のアセットのバージョンをコンパイルする必要があります。 md5ハッシュの有無にかかわらず?私の Rails のコピーがフィンガープリントのないバージョンを生成しないのはなぜですか?

4

2 に答える 2

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;
}
于 2012-04-18T01:24:52.287 に答える
0

Rails は、image_tag を使用してそれを処理します。

image_tag "myimage.jpg"

これにより、適切なURLが取得されます。as(テストされていない)の画像URLを生成する小さなサービスを作成できる場合があります。

Class AssetsService < ApplicationController  
  def index
  end
end

index.js.haml

= image_tag "myimage.jpg"
于 2012-04-18T00:30:35.763 に答える