0

我的控制器中有这个:

def frontpage
  @sections = Section.all
end

在生产环境中,查询似乎在请求之间被缓存。直到我重新启动一个应用程序,@sections总是一样的。为什么以及如何解决这个问题?我还应该提到,我在生产中使用 Postgres,这可能是原因吗?

4

3 回答 3

1

我相信在您的生产环境中,您已经在某处启用了缓存。虽然我无法告诉你原因和地点,但我可以给你一个解决方案:

def frontpage
    uncached do
        @sections = find(:all)
    end
end

至少它应该做的伎俩

e:这样做的好处是,它只影响块内的代码。其他所有内容仍应被缓存。

于 2012-06-10T23:56:39.383 回答
0

请求之间不会缓存查询,但可以缓存操作。您cache_action的控制器中是否定义了其他缓存机制?

编辑:要确定正在缓存的是否是您的操作,请将其放入您的操作中:

def frontpage
  return render :text => Time.now.to_s
  ...
end

并且看到它的变化。

于 2012-06-11T02:23:19.483 回答
0

从相关问题中查看此答案。如果您的配置设置为缓存,那么您应该将其关闭(至少在开发中)。否则,如果您想使特定页面的缓存无效,您可以考虑在控制器中定义一个方法来执行此操作:

private
def invalidate_cache
     Rails.cache.delete("/sections")
end

您需要指定何时调用它,但它可以解决问题。

于 2012-06-11T03:32:55.587 回答