我正在使用新的缓存解决方案Rails here。在测试和生产环境中的坏ETag值
的发展环境工作正常,但测试和生产发送无效ETag
头忽略stale?
函数的参数。
这里是是我的控制器中的一个的相应部分:
def index
@categories = Category.all
if stale?(:etag => @categories)
respond_to do |format|
format.html
format.xml { render :xml => @categories }
format.json { render :json => @categories }
end
end
end
的ActionController::Base
的stale?
方法调用fresh_when
方法,其设置Response
对象,它具有下面的代码的etag
:
def etag=(etag)
if etag.blank?
headers.delete('ETag')
else
headers['ETag'] = %("#{Digest::MD5.hexdigest(ActiveSupport::Cache.expand_cache_key(etag))}")
end
end
Category
型号发送正确的cache_key
,如果我在每个环境中都得到它:
>> Category.find(1).cache_key
=> "categories/1-20100117153353"
>> ActiveSupport::Cache.expand_cache_key(Category.find(:all))
=> "categories/1-20100117153353/categories/2-20100117152007/categories/3-20100116094423/categories/4-20100116094423/categories/5-20100116094423/categories/6-20100116094423/categories/7-20100116094423/categories/8-20100117145800/categories/9-20100117145808"
所以我根本不明白发生了什么事,因为当我选择的URL http://localhost:3000/admin/categories/
与发展环境下,ETag
的每一次变化,当我上保存Category
但测试或生产它没有。
我已经与的WEBrick和测试它薄
cache_key是**不等于最终的'ETag'值! – 2010-01-18 10:30:06
'ETag'的值不是无效的,它只是保持与前一个请求的值相同 – 2010-01-18 11:03:23