Ruby on rails 如何清除缓存以使连续的随机查询返回不同的结果?
我想多次调用它,让它返回不同的结果,但是(我认为)缓存导致它一次又一次返回相同的结果:Ruby on rails 如何清除缓存以使连续的随机查询返回不同的结果?,ruby-on-rails,ruby,caching,random,Ruby On Rails,Ruby,Caching,Random,我想多次调用它,让它返回不同的结果,但是(我认为)缓存导致它一次又一次返回相同的结果: randomMatchups = Matchup.order("RANDOM()") 我尝试使用: uncached do randomMatchups = Matchup.order("RANDOM()") end 及 及 到目前为止都没有运气 请注意,此问题仅在生产(Heroku)中出现,在本地运行时不是问题 有什么建议吗 编辑:澄清一下,我在刷新页面时会得到不同的结果,但是当我通过AJAX请
randomMatchups = Matchup.order("RANDOM()")
我尝试使用:
uncached do
randomMatchups = Matchup.order("RANDOM()")
end
及
及
到目前为止都没有运气
请注意,此问题仅在生产(Heroku)中出现,在本地运行时不是问题
有什么建议吗
编辑:澄清一下,我在刷新页面时会得到不同的结果,但是当我通过AJAX请求到达控制器时,它就不起作用了。我相信,模型上的类方法uncached应该是这样工作的:
randomMatchups = Matchup.uncached do
Matchup.order("RANDOM()")
end
编辑:
我看到您的编辑带有另一个可能的解决方案。您的浏览器可能正在缓存响应。如果您使用的是jQuery,请将cache选项设置为false
$.ajax({
url: "test.html",
cache: false
})
jQuery将添加一个带有时间戳“={timestamp}”的GET参数,这将阻止浏览器缓存响应
如果您不使用jQuery,请寻找等效的解决方案,或者自己添加一个时间戳:
<%= foo_path(timestamp: Time.now.to_f) %>
RANDOM()+N
其中N是一个随机数可以解决这个问题吗?可能会,但在请求之间我应该在哪里存储该数字?为什么要存储它?这里的想法是,如果这是问题的话,就破坏缓存。如果刷新和AJAX调用的结果不同,请仔细查看log/development.log
,以查看正在运行的查询的确切内容。@jackerman09我已经补充了我的答案,以涵盖AJAX缓存。这可能是Heroku的事情,因为在那里部署应用程序的方式与正常情况略有不同。您应该尝试在本地复制它,可能使用一个带有生产环境的VM。我尝试了这个,结果导致随机匹配为零。你知道为什么会这样吗?
$.ajax({
url: "test.html",
cache: false
})
<%= foo_path(timestamp: Time.now.to_f) %>