0

所以我们使用相同的控制器来提供我们网站的移动和桌面视图。我们还大量使用动作缓存来缓存 memcache 中页面的 html。我一直在尝试找出一种方法,将所有移动请求的缓存前缀全局更改为“views-mobile/”,而不是标准的“views/”。这样,移动和桌面页面将保存在不同的命名空间下,因此内存缓存中没有冲突。

我们可以通过使用 is_mobile? 的控制器变量创建自定义 cache_path 来为每个 caches_action 方法执行此操作,但我们更愿意以某种方式全局执行此操作。有什么建议么?我想这需要猴子修补 ActionController::Caching 但我无法弄清楚它在哪里生成“views/”前缀。

4

2 回答 2

0

对不起,我是 Rails nubie,所以我不太明白你的问题,但如果它是正确的,这就是你的意思吗?

这是在我的routes.rb上:

scope "/administrator" do
   resources :users
end

我将users_path“前缀”更改为administrator. 如有错误请见谅 :D

于 2013-07-10T07:00:32.967 回答
0

我实际上最终自己弄清楚了这一点。基本上 ActionController::Base 使用一个名为 fragment_cache_key 的函数来生成特定片段的缓存键(这是 ActionCaching 深入使用的)。因此,您基本上会覆盖该方法并包含您自己的有关如何生成前缀的逻辑。这就是我的方法覆盖的外观:

# Monkey patch fragment_cache_key
def fragment_cache_key(key)
    ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, mobile_device? ? "views-mobile" : "views")
end

mobile_device在哪里?是我自己的函数,它可以确定用户是在请求网站的移动版还是桌面版。

于 2013-08-06T17:17:17.947 回答