0

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

caches_action :index, :expires_in => 14.days

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

4

1 回答 1

1

Railscaches_action文档说:

动作缓存在内部使用片段缓存和一个环绕过滤器来完成这项工作。片段缓存根据请求的主机和路径命名。在http://david.example.com/lists/show/1访问的页面 将生成一个名为 david.example.com/lists/show/1 的片段。这允许缓存器区分 david.example.com/lists/ 和 jamis.example.com/lists/ - 这是帮助子域作为帐户键模式的有用方法。

所以生成的密钥对于不同的域应该是不同的。

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

请求/响应如下所示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

更新

如果您想根据请求创建不同的缓存键,而默认值对您来说不够用,那么您可以:cache_path使用caches_action.

您可以在这个 SO question中找到示例。

于 2012-09-26T21:15:37.373 回答