我使用Memcached(实际上是Heroku上的Memcachier)在Rails 3应用程序中进行动作缓存,如下所示:
caches_action :index, :expires_in => 14.days
问题是我的应用程序是从许多不同的域访问的,内容需要变化。目前,所有域的缓存都相同。我如何实现这一目标?
答案 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
中找到示例。