【问题标题】:How to change ActionCaching "views/" prefix per request如何更改每个请求的 ActionCaching “views/”前缀
【发布时间】:2013-08-07 01:17:17
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

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

    这是我的 routes.rb

    scope "/administrator" do
       resources :users
    end
    

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

    【讨论】:

      【解决方案2】:

      我实际上最终自己解决了这个问题。基本上 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 在哪里?是我自己的函数,它可以判断用户是在请求网站的移动版还是桌面版。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2018-09-05
        • 2021-09-24
        • 1970-01-01
        • 2014-12-01
        • 2021-08-06
        • 1970-01-01
        相关资源
        最近更新 更多