Rails 3.1資産パイプライン:期限切れの資産へのリクエストに対処する方法は?
-
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
所属していません StackOverflow