gpt4 book ai didi

ruby-on-rails - 测试和生产环境中的错误 ETag 值

转载 作者:可可西里 更新时间:2023-11-01 17:15:55 26 4
gpt4 key购买 nike

我正在使用新的 Rails 缓存解决方案,如 here 所述.

开发环境工作正常,但是测试生产发送无效的ETag头忽略参数stale? 函数。

这是我的一个 Controller 的相应部分:

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::Basestale? 方法调用fresh_when 方法设置etag Response 对象,具有以下代码:

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 时都会更改,但对于 testproduction 它不会。

我用 webrickthin 测试过它

最佳答案

解决方案是 Category.all 方法在类级别缓存结果,因此一旦它被提取,所有内容都会被缓存以供其余请求使用。

它在开发环境中不存在,因为每次重新加载模型时,因为在该环境中 config.cache_classesfalse!

关于ruby-on-rails - 测试和生产环境中的错误 ETag 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com