2011-08-22 28 views
7

Tôi gặp sự cố khi hết hạn bộ nhớ cache hành động trong ứng dụng của mình.Hết bộ nhớ cache hành động với cache_path tùy chỉnh

Đây là bộ điều khiển của tôi:

class ToplistsController < ApplicationController 
    caches_action :songs, cache_path: :custom_cache_path.to_proc 

    def custom_cache_path 
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}" 
    end 

    def songs 
    # ... 
    end 
end 

tôi bằng cách nào đó cần để có thể thiết lập lại các con đường bộ nhớ cache tùy chỉnh, nhưng tôi không thể tìm ra cách.

Tôi đã thử sử dụng this technique, mà không thành công. Dường như Dalli, bộ nhớ cache của tôi, không hỗ trợ đối sánh regexp.

Tôi nhận được lỗi này khi cố gắng sử dụng mã này:

expire_fragment(/songs/)

ActiveSupport::Cache::DalliStore does not support delete_matched

Tôi đã cố gắng sử dụng dòng mã này, để gỡ lỗi, nhưng nó bị bỏ qua.

before_filter only: [:songs] 
    expire_fragment(custom_cache_path) 
end 

Tôi đang sử dụng Rails 3.1.0.rc6, Dalli 1.0.5 và Ruby 1.9.2.

+1

Bạn sử dụng regex với dallicache bằng đá quý này: https://github.com/defconomicron/dalli-store-extensions –

+0

Tôi sẽ thử nó, cảm ơn. – Oleander

Trả lời

0

Khối before_filter bị bỏ qua bộ đôi vào bộ nhớ cache hành động.
Giải pháp là sử dụng bộ nhớ cache phân đoạn thay thế.

# Controller 
class ToplistsController < ApplicationController 
    helper_method :custom_cache_path 

    before_filter only: [:songs] 
    if params[:reset_cache] 
     expire_fragment(custom_cache_path) 
    end 
    end 

    def custom_cache_path 
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}" 
    end 

    def songs 
    # ... 
    end 
end 

# View 

<%= cache custom_cache_path do %> 
    Content that should be cached 
<% end %> 
0

Bạn cũng có thể muốn xem giải pháp here. Với cách tiếp cận của mình, bạn có thể hết hiệu lực với các tham số phụ.

Các vấn đề liên quan