是否可以以编程方式清除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在下一个请求时重新加载。