0

有一个控制器处理大型 XML 提要的呈现

module Spree
  class FeedsController < Spree::StoreController
    ...

    caches_action :products_out
    cache_sweeper FeedSweeper

    # XML feed in format of `xxxxxxx.com'
    def products_out
      @products = Product.all
      respond_to do |format|
        format.xml
      end
    end
end

波纹管是相应的清扫器的子类:

module Spree
  class FeedSweeper< ActionController::Caching::Sweeper
    observe Product

    def after_update(product)
      # cache_configured? is nil, @controller is nil here, why ?
      expire_action(:controller => :feeds,
                    :action     => :products_out,
                    :format     => :xml)
    end
end

Spree::FeedSweeper 更新时调用上面的方法Spree::Product,但是它似乎expire_action默默地死掉并且缓存不会失效。

有人可以解释这个问题吗?更好地提出一些解决方案?

谢谢。

4

1 回答 1

0

您使用的是哪个 Rails 版本?在 Rails 3.2.14 之后expire_action似乎已弃用。

也许您可以尝试找出密钥然后直接用 清除它Rails.cache.delete(key)

于 2014-03-17T02:22:21.277 回答