我有一个基于Rails 3的CMS,允许用户创建和修改布局和视图。这些布局和视图与框架中内置的布局和视图相同,仅由某些附加功能的模型支持。我想解决的问题是,这些模板文件在公共端访问时会被缓存,因此除非重新启动服务器,否则无法看到布局或视图中的更改。在禁用缓存的开发模式下不会发生这种情况,但显然在生产中关闭模板缓存对性能来说并不是很好。清除memcache似乎没有办法。是否有可能以编程方式清除生产中的布局和视图缓存,可能还有像重载这样的东西!就像我们在控制台中一样?或者每次有人想要调整其中一个布局或视图时,我都不得不重新启动Passenger(可能使用此线程中的方法:Rails Cache Clearing)?
请注意,我不是指清除公共页面所依赖的页面和操作缓存,并且工作得很好。
答案 0 :(得分:2)
JoséValim在“Crafting Rails应用程序”中有一个很好的章节,涵盖了这一主题。使用Mongoid存储视图模板的Here is an approach。如果您构建自己的视图解析器,那么当有人在数据库中保存新模板时,您只需要在解析器实例上调用#clear_cache。
答案 1 :(得分:2)
这种配置可能有所帮助(至少它对我有用):
config.action_view.cache_template_loading = false
rails 2只有一点点差异:
config.action_view.cache_template_reloading = false
答案 2 :(得分:1)
在生产模式下,需要重新启动以实现rails代码更改是正常的,这是您通过编辑布局和视图所做的。如果您在应用程序代码运行时编辑应用程序代码,听起来您实际上是在开发环境中运行。在生产模式下,我不知道如何在不触及restart.txt或重新启动Web服务器的情况下刷新Passenger。
编辑:您应该能够在应用程序中以编程方式触摸tmp / restart.txt。这应该告诉Passenger在下一个请求时重新加载。