1

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

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

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

或者,如果有一种方法可以在 cache_classes 开启时告诉 rails 视图更改,那会更好,因为我可以永久保持 cache_classes 开启。

非常感谢

4

1 回答 1

0

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

首先我们需要重写 ActionView::Resolver 类中的一个方法,如下所示

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

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

我发布了这篇文章,希望通过 Rails 源代码为其他人节省大量时间,但有一些警告:

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

b)如果你在这里放一个慢的方法,你绝对会扼杀你的性能,因为这个方法会在每个请求中被调用很多次。我很高兴这样做,因为在我的情况下,该代码仅在我的本地测试环境中使用,并且我必须在需要时明确包含它,但就个人而言,我可能没有胆量/胃来放置类似的东西这在生产代码中。

希望这可以帮助某人。

于 2012-07-05T14:42:34.807 回答