通过域改变memcached动作缓存

时间:2012-09-24 20:43:23

标签: ruby-on-rails caching memcached

我使用Memcached(实际上是Heroku上的Memcachier)在Rails 3应用程序中进行动作缓存,如下所示:

caches_action :index, :expires_in => 14.days

问题是我的应用程序是从许多不同的域访问的,内容需要变化。目前,所有域的缓存都相同。我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

Rails caches_action文档说:

  

动作缓存在内部使用片段缓存和周围过滤器   做这个工作。片段缓存根据主机和命名   请求的路径。访问的页面   http://david.example.com/lists/show/1将生成一个名为的片段   david.example.com/lists/show/1。这让牧师能够   区分david.example.com/lists/和   jamis.example.com/lists/ - 这是一种有用的协助方式   subdomain-as-account-key pattern。

因此,不同域的生成密钥应该不同。

要检查它,我甚至用:mem_cache_store创建了一个应用程序,并以详细模式(-vv)启动了一个memcached服务器。

http://localhost:3000/的请求/响应如下所示:

<21 get views/localhost:3000/index
>21 END
<21 set views/localhost:3000/index 0 0 7123
>21 STORED

使用其他域http://foobar:3000/

<21 get views/foobar:3000/index
>21 END
<21 set views/foobar:3000/index 0 0 7123
>21 STORED

更新

如果您想根据请求创建不同的缓存键,并且默认值不够,那么您可以使用caches_action的{​​{3}}选项。

您可以在:cache_path中找到示例。