ruby-on-rails - 在内存缓存中缓存整个页面,并可选择从中间件或 Controller 提供服务

标签 ruby-on-rails ruby controller memcached middleware

我有一个页面想缓存在内存缓存中。我在 Heroku 上,所以标准页面缓存不是一个选项。

我想要一个中间件来检查正在设置的特定 cookie 值。如果它不存在,我只想呈现缓存中的值。否则,我希望 Rails 像往常一样处理它,然后可选地服务器缓存中的值稍后在 Controller 中(在检查 cookie 中的值时)。

所以基本上,我需要一种方法来在内存缓存中缓存页面并稍后提供。我不想只使用静态文件以便页面可以利用布局、 Assets 管道等。所以我想主要问题是如何将页面呈现到内存缓存中。

如有任何帮助,我们将不胜感激。

最佳答案

Rack::Cache会做你需要的,它会在生产中自动启用。它使用 HTTP headers以确定缓存行为。您可以在 Controller 操作中使用 fresh_whenstale?expires_in 调用来设置这些 header 。然而,为 Rack::Cache 设置 public: true 选项以获取它是很重要的。

fresh_when @product, public: true

缓存默认存储在 Rails.cache 中,因此需要配置为使用 memcached。

这种方法的一个很好的副作用是,由于它使用 HTTP 缓存,缓存可以存储在客户端的浏览器中或本地网络代理上。这将使用户感觉您的网站更快,因为缓存更近。

我进一步详细说明in this RailsCasts episode (paid subscription required) .

关于ruby-on-rails - 在内存缓存中缓存整个页面,并可选择从中间件或 Controller 提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265938/

相关文章:

ruby-on-rails - Ruby:条件连接的简写?

ruby-on-rails - 尝试使用 RVM 安装 Rails 时如何修复错误

c# - 如何将 Ruby 的 SHA512.hexdigest 转换为 C#?

macos - View Controller 可以拥有一张工作表吗?

mysql - 在 MySQL Rails 4 中使用数组

ruby-on-rails - 在 Ruby 或 Rails 中,将东部时间转换为 UTC 的最佳方法是什么?

spring - 对象的 REST Controller 类删除方法 responseType 为空

angularjs - 工厂对象上的 $watch 问题

ruby-on-rails - config.cache_classes = true 时缺少方法

ruby-on-rails - Ruby:CSV 解析器在我的数据中被双引号绊倒