【问题标题】:Is it possible to programmatically clear Rails 3 layouts and views cache?是否可以以编程方式清除 Rails 3 布局和视图缓存?
【发布时间】:2011-08-17 08:05:55
【问题描述】:

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

请注意,我指的不是清除页面和操作缓存,公共页面依赖这些缓存并且工作正常。

【问题讨论】:

    标签: ruby-on-rails caching layout view


    【解决方案1】:

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

    【讨论】:

    • @monocle-感谢您提供指向 Crafting Rails Applications 中相关章节的链接,我会看一下。
    【解决方案2】:

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

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

    rails 2 中只是略有不同:

    config.action_view.cache_template_reloading = false
    

    【讨论】:

    • config.action_view.cache_template_loading = false 在 rails 4 中仍然有效
    【解决方案3】:

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

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

    【讨论】:

    • 绝对理解这不是一个典型的 Rails 应用程序,其中布局和视图更改(以及任何其他代码)存在于源代码控制系统中,并且需要重新启动才能使这些修改生效。事实上,管理端就是这样操作的。这个应用程序只是有一个特殊的用例,理想情况下,控制公共页面的布局和视图可以在理想情况下更改,而无需重新启动服务器。
    • @cmarin - 这听起来像是一个有趣的特例。你能解释一下为什么你需要这个特殊要求的更多细节吗?也许它会帮助我们为您找到一个好的答案(即,也许存在一些我们可以为您指出的东西)。
    • 也许视图中经常变化的部分应该是CMS系统的一部分,允许它们被编辑并存储在数据库中。
    • 这个应用程序最初是在 Rails 1.x 上构建的。至少在那个时候,允许用户创建公共页面的最简单和最干燥的方法是重用 Rails 中内置的现有布局和视图功能,这要求这些文件存在于文件系统中。基本上,我们有 Layout 和 View ActiveRecord 模型,它们在面向公众的页面的数据库中存储模板的 ERB 和 HTML。每当创建或编辑这些文件时,系统会将文件吐出到自定义目录(rails_root/ui/layouts 和 /rails_root/ui/views)中。
    • 这些面向公众的布局和视图与 /rails_root/app/views 中的视图和布局分开,后者在很大程度上控制着系统的管理端。创建的内容显然也存储在数据库中,它利用了这些视图和布局。清除这些页面的缓存没有问题。问题只是公共页面所依赖的布局和视图被缓存了,如果不重新启动服务器,我们似乎无法清除它们。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多