【问题标题】:Cannot update models whith page caching无法通过页面缓存更新模型
【发布时间】:2011-12-04 01:47:07
【问题描述】:

我对 Rails 页面缓存机制有一个非常基本的理解问题。

在 Rails 2.0.5 应用程序上,我使用了大量整页缓存,一切正常,页面由 apache 以极快的速度提供。

到目前为止,所有内容都在管理部分处理,缓存清理器运行良好。

但我现在已经向用户开放了一些部分的版本,这些用户不通过“admin”命名空间,而是通过常规路由。

问题在于,似乎在执行更新时,它们并没有通过“put”操作进入 mongrel,而是我只是获取了缓存页面(数据库中没有操作,没有 flash 消息,什么都没有。 ...)

我觉得我在这里错过了一些东西,是否可以将页面缓存与常规 REST 路由一起使用?还是我的 mongrel/apache 配置有问题?

编辑:

感谢您的回答,但这不是我的意思,整页缓存机制运行良好,我在管理控制器中有专门的清扫器来刷新页面。

我的问题是(或者我认为是)当模型通过常规控制器更新时,表单被提交到缓存页面而不是适当的操作。

在表格中

/pages/1-hello/edit
表单应在“/pages/1-hello”上使用“put”方法发布

但我相信它会转到缓存页面'/pages/1-hello.html'并被视为常规获取......

当我提交表单时,我只看到显示动作,没有闪烁消息,没有更新。 然后我删除公共目录中的缓存文件,再次提交表单,突然一切正常......

我阅读了“rails way”中的缓存部分和 railsenvy.com 上的教程,但我从未见过任何提及缓存页面会带来此类问题的内容....

【问题讨论】:

    标签: ruby-on-rails caching


    【解决方案1】:

    您可能缓存了太多页面。如果您正在缓存整个页面,然后通过 put 操作更改该页面的内容,除非您明确清除缓存,否则该页面不会注册更改。

    如果您有一份“The Rails Way”副本,则会提供一些很好的示例来过期页面,以便在下次加载时重新加载它们。

    或多或少,您必须在创建操作中执行以下操作:

    expire_page :action => 'index'
    

    您还可以创建一个观察者来观察您的模型并使缓存过期,而无需在创建或更新操作后显式调用它。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      相关资源
      最近更新 更多