Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否可以动态更改Rails中的缓存类配置设置?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 是否可以动态更改Rails中的缓存类配置设置?

Ruby on rails 是否可以动态更改Rails中的缓存类配置设置?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个小的交互式脚本,可以用我的Rails应用程序做很多事情。通常,我在运行此测试时禁用了cache_classes config选项,这样我就可以修改和重新加载视图,而无需重新启动它。但是,某些测试仅在启用cache_类的情况下才能工作。特别是当缓存类被禁用时,集成测试表现出非常奇怪的行为 理想情况下,我想做的是能够在脚本中打开和关闭cache_类,而无需重新启动脚本,但虽然我可以更新此变量的值,但它没有任何效果 有人知道动态更新缓存类的方法吗 或者,如果有一种方法可以在打开cache_类的

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

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

有人知道动态更新缓存类的方法吗

或者,如果有一种方法可以在打开cache_类的同时告诉rails视图的更改,那就更好了,因为我可以让cache_类永久打开


非常感谢

对于可能有此问题的其他人,有一种相对简单的方法可以使用自定义方法来确定是否应该缓存视图

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

module ActionView
  class Resolver
    def caching?
      @caching = some_custom_method
    end
  end
end
然后,我们可以使用自定义方法根据需要的条件打开和关闭视图缓存

我发布这篇文章的目的是希望通过Rails源代码为其他人节省大量时间,但有几个注意事项:

a) 我只在Rails 3.0.14上检查了这一点,因为这是目前适用于我的版本。它可能在其他版本上工作,也可能不工作

b) 如果你在这里放一个慢方法,你绝对会扼杀你的性能,因为每个请求都会调用这个方法很多次。我很乐意这样做,因为在我的例子中,代码只在我的本地测试环境中使用,我必须在需要时显式地包含它,但就我个人而言,我可能没有勇气在生产代码中使用类似的东西

希望这对别人有帮助