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

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

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

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

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

config.action_view.cache_template_loading = false 
  • 在轨道3中工作

导轨2有一点点差异:

 config.action_view.cache_template_reloading = false 

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

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