【发布时间】:2015-02-10 07:03:01
【问题描述】:
对于我们的生产环境,我们在 Rails(3.2 版)中进行了配置
config.action_controller.perform_caching = false
奇怪的是,我们发现(通过启用调试)SQL 查询在收到 JSON 请求时会碰到 SQL 缓存。页面从未命中缓存,数据正常。
有谁知道 Rails 中对于 JSON 请求和 SQL 缓存是否有一些特殊行为?
另外,我们有 config.threadsafe!,我们正在使用 JRuby。
注意我们在 Chrome 和 Safari 中测试了我们的网页,都出现了同样的问题:页面本身有正确的数据,而 JSON 请求(有时)没有。
注意:如果有人能说明这里是否使用了 QueryCache#call 方法
https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/query_cache.rb
这会很棒,因为无论上述设置如何,它似乎都使用缓存。
可能值得一提的是,特定问题与current_user.related_object 之类的代码有关;从缓存中获取related_object SQL 结果的位置。 current_user 由身份验证 gem devise 保存。
更新
我们已经跟踪了这个问题,并且似乎在多线程环境中没有正确清除 SQL 缓存(同样,我们使用了 JRuby)。由于我们所有的页面都有 JSON 请求,因此存在一些与未清除的 SQL 缓存浮动的连接,这会在重用时导致后续请求出现问题。
作为一种解决方法,我们在ApplicationController 中添加了一个before_filter 方法来清除当前连接的SQL 缓存。
【问题讨论】:
标签: ruby-on-rails multithreading caching jruby