4

アセット パイプラインを使用してアプリケーションをセットアップすると、次のような URL を使用して画像が生成される場合があります (署名は省略されています)。

http://mysite.com/assets/logo-1b2b3c.png

次に、アセットを変更するか、グローバル アセット バージョンを更新すると、次のようになります。

http://mysite.com/assets/logo-2b3c1a.png

現在、一部の人々はまだ古いアセットにリクエストを送信しています。デフォルトのRails 3.1デプロイであると私が理解しているものの下では、これらは404にすぎません。これはあまり友好的ではないようです。新しいアセットに 301 を送信するか、新しいアセットを直接配信する方が適切です。

これを行うための組み込みの方法はありますか、それとも独自のアセット不足機能を実装する必要がありますか?

4

1 に答える 1

2

私はそれを自分で実装しました:

Myapp::Application.routes.draw do
  match 'assets/:id.:format' => 'assets#show'
end

class AssetsController < ApplicationController
  def show
    asset_without_digest = "#{params[:id].gsub /-[0-9a-f]{32}$/, ''}.#{params[:format]}"
    new_path = ActionView::Base.new.image_path(asset_without_digest)
    if url_for(params).include? new_path
      head 404
    else
      redirect_to new_path, :status => 301
    end
  end
end
于 2011-09-24T03:19:49.800 に答える