是否可以动态更改Rails中的cache_classes配置设置?

时间:2012-07-02 16:09:31

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个小的交互式脚本,用于使用我的Rails应用程序执行一些操作。通常我在禁用cache_classes配置选项的情况下运行它,这样我就可以修改和重新加载视图而不必重新启动它,但某些测试只能在启用cache_classes的情况下使用。特别是当禁用cache_classes时,集成测试会表现出非常奇怪的行为。

理想情况下,我想要做的是能够在不重新启动脚本的情况下从脚本中打开和关闭cache_classes,但是虽然我可以更新此变量的值,但它没有任何效果。

有没有人知道动态更新cache_classes的方法?

或者,如果有一种方法可以在cache_classes启用时告诉rails有关视图更改的信息,那就更好了,因为我可以永久保留cache_classes。

非常感谢

1 个答案:

答案 0 :(得分:0)

为了其他可能遇到此问题的人的利益,可以使用自定义方法确定是否应缓存视图。

首先,我们需要覆盖ActionView :: Resolver类中的方法,如下所示

module ActionView
  class Resolver
    def caching?
      @caching = some_custom_method
    end
  end
end

然后我们可以使用我们的自定义方法根据我们想要的任何条件打开和关闭视图缓存。

我发布了这篇文章是希望通过Rails源代码拯救其他人,但有几点需要注意:

a)我只在Rails 3.0.14上检查了这个,因为那是现在适用于我的当前版本。它可能适用于其他版本,也可能不适用。

b)如果你在这里放一个慢速方法,你绝对会扼杀你的表现,因为这个方法每次请求都会被调用很多次。我很高兴这样做,因为在我的情况下代码只在我的本地测试环境中使用,我必须在我想要的时候明确地包含它,但就个人而言,我可能不会有球/胃放置在生产代码中这样的东西。

希望这有助于某人。