【问题标题】:Rails page caching with intra-page administration带有页内管理的 Rails 页面缓存
【发布时间】:2010-03-09 22:32:14
【问题描述】:

我很想在我运行的 Rails 网站上使用页面缓存。每个页面上的信息大多是不变的,但是需要运行以收集信息的查询很复杂,并且在某些情况下可能很慢。使用页面缓存的唯一障碍是管理界面内置在主站点中,因此可以在不离开感兴趣的页面的情况下执行管理操作。

我正在使用 Apache+mod_rails(乘客)。当当前用户具有会话变量或名为“admin”* 的 cookie 时,是否有办法向 Apache 指示 .html 文件应该被忽略? session 变量不需要由 Apache 评估有效性(因为在这种情况下它将由 Rails 评估)。

【问题讨论】:

    标签: ruby-on-rails apache passenger mod-rails page-caching


    【解决方案1】:

    当当前用户拥有会话变量或名为 'admin'* 的 cookie 时,是否有办法向 Apache 指示 .html 文件应被忽略?

    我相信这是不可能的。即使是这样,我想应该也很棘手。

    您可以改为使用Action Caching。来自文档的引用:

    页面缓存的问题之一是 您不能将其用于以下页面 需要检查代码来确定 是否应该允许用户 访问。

    这听起来正是你的情况。


    但是,如果您仍然真的需要通过 Web 服务器进行页面缓存,我认为您最好为管理员和非管理员实现单独的页面。 这是因为一个原因。当您启用页面缓存时,rails 根本不会处理请求,因此无法知道用户是否经过身份验证。


    您可能可以使用Dynamic Page Caching 克服这个问题。这个想法基本上是从 JavaScript 添加“管理”部分。不过我个人不太喜欢这个。


    另一个更新:快速搜索brought我到this article。
    这个想法是有条件地缓存页面并插入mod_rewrite 来服务管理页面。

    会为你工作,但这是一个相当肮脏的解决方案。

    【讨论】:

    • 是的,我知道 Rails 提供的其他缓存方案,但使用动作或片段缓存而不是页面缓存“包罗万象”的解决方案要工作得多。不过,谢谢。
    • 也许,动态页面缓存会给你一个提示。更新了答案。
    • 哈哈,是的,我以前研究过。它比片段缓存更加复杂和讨厌。我正在寻找一个系统,只需稍加修改即可有效地插入现有代码。
    • 嗯,那么你也许可以做我(再次)添加到答案中的内容。
    • 正是我想要的。谢谢!让我确保它有效,然后我会接受答案(以免误导看到此 Q/A 的人)。
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2012-01-28
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多