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 回答