是否有可能以编程方式清除Rails 3布局和视图缓存?

时间:2011-05-02 23:19:08

标签: ruby-on-rails caching layout view clear

我有一个基于Rails 3的CMS,允许用户创建和修改布局和视图。这些布局和视图与框架中内置的布局和视图相同,仅由某些附加功能的模型支持。我想解决的问题是,这些模板文件在公共端访问时会被缓存,因此除非重新启动服务器,否则无法看到布局或视图中的更改。在禁用缓存的开发模式下不会发生这种情况,但显然在生产中关闭模板缓存对性能来说并不是很好。清除memcache似乎没有办法。是否有可能以编程方式清除生产中的布局和视图缓存,可能还有像重载这样的东西!就像我们在控制台中一样?或者每次有人想要调整其中一个布局或视图时,我都不得不重新启动Passenger(可能使用此线程中的方法:Rails Cache Clearing)?

请注意,我不是指清除公共页面所依赖的页面和操作缓存,并且工作得很好。

3 个答案:

答案 0 :(得分:2)

JoséValim在“Crafting Rails应用程序”中有一个很好的章节,涵盖了这一主题。使用Mongoid存储视图模板的Here is an approach。如果您构建自己的视图解析器,那么当有人在数据库中保存新模板时,您只需要在解析器实例上调用#clear_cache。

答案 1 :(得分:2)

这种配置可能有所帮助(至少它对我有用):

config.action_view.cache_template_loading = false
  • 适用于rails 3

rails 2只有一点点差异:

config.action_view.cache_template_reloading = false

答案 2 :(得分:1)

在生产模式下,需要重新启动以实现rails代码更改是正常的,这是您通过编辑布局和视图所做的。如果您在应用程序代码运行时编辑应用程序代码,听起来您实际上是在开发环境中运行。在生产模式下,我不知道如何在不触及restart.txt或重新启动Web服务器的情况下刷新Passenger。

编辑:您应该能够在应用程序中以编程方式触摸tmp / restart.txt。这应该告诉Passenger在下一个请求时重新加载。