Rails 3.1資産パイプライン:期限切れの資産へのリクエストに対処する方法は?

StackOverflow https://stackoverflow.com/questions/7343930

  •  27-10-2019
  •  | 
  •  

質問

アセットパイプラインでアプリケーションを設定すると、このようなURL(署名が切り捨てられた)で画像を生成する可能性があります。

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

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

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

現在、一部の人々はまだ古い資産にリクエストを送信しています。私がデフォルトのRails 3.1の展開であると理解していることの下では、これらはたった404になります。それはあまり友好的ではないようです。新しい資産に301のいずれかに、または新しい資産をまっすぐに配信する方が良いでしょう。

これを行うための組み込みの方法はありますか、それとも独自の資産の欠落機能を実装する必要がありますか?

役に立ちましたか?

解決

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

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top