我有一个页面想缓存在内存缓存中。我在 Heroku 上,所以标准页面缓存不是一个选项。
我想要一个中间件来检查正在设置的特定 cookie 值。如果它不存在,我只想呈现缓存中的值。否则,我希望 Rails 像往常一样处理它,然后可选地服务器缓存中的值稍后在 Controller 中(在检查 cookie 中的值时)。
所以基本上,我需要一种方法来在内存缓存中缓存页面并稍后提供。我不想只使用静态文件以便页面可以利用布局、 Assets 管道等。所以我想主要问题是如何将页面呈现到内存缓存中。
如有任何帮助,我们将不胜感激。
最佳答案
Rack::Cache会做你需要的,它会在生产中自动启用。它使用 HTTP headers以确定缓存行为。您可以在 Controller 操作中使用 fresh_when
、stale?
和 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/