2012-07-23 39 views
8

Tôi có nhiều đoạn được lưu trong bộ nhớ cache trên trang web của mình vì tôi sử dụng bộ nhớ đệm phân đoạn với action_suffix để sử dụng bộ nhớ đệm trong mẫu ứng dụng của mình. Im sử dụng này cho navigatin ví dụ, ... như thế này:các khóa danh sách của tất cả các tập tin được lưu trong bộ nhớ cache

<% cache(:action => params[:action], :action_suffix => "navigation_#{request.path}") %> 
    <%= render 'navigation_entries/navigation' %> 
<% end %> 

của nó làm việc khá tốt nhưng bây giờ tôi có một chút vấn đề hết hạn các mảnh vỡ cache. Những gì tôi cần là danh sách tất cả các khóa cho các đoạn được lưu trong bộ nhớ cache. Tôi đã có nhiều hơn chỉ là một cái nhìn tại các tài liệu, nhưng tôi đã không tìm thấy bất cứ điều gì.

Có cách nào để liệt kê tất cả các phím phân đoạn không?

+0

bạn đang sử dụng bộ nhớ cache nào? –

+0

Tôi không chỉ định bất kỳ cửa hàng bộ nhớ cache nào để Im sử dụng kho lưu trữ bộ nhớ cache mặc định – davidb

Trả lời

6

Bạn có thể vượt qua một Regexp-expire_fragment:

expire_fragment(%r{navigation_}) 

Theo các tài liệu

biểu thức chính quy hết hạn chỉ được hỗ trợ trên bộ nhớ đệm có thể lặp qua tất cả các phím (không giống như memcached).

+0

cảm ơn điều đó thật tuyệt! – davidb

6

Không có phương pháp nào có thể tìm thấy trên bộ đệm để liệt kê tất cả các khóa, tuy nhiên nếu bạn đang sử dụng bộ đệm tệp mặc định, bạn có thể liệt kê chúng bằng cách tìm trong hệ thống tệp. Khi ở trong đường ray mặc định dir trên unix/linux bạn có thể sử dụng một cái gì đó như thế này để xem tất cả các file cache (đặt theo tên của các phím URL mã hóa):

find ./tmp/cache -type f 

Hoặc này để unencode và dải dirs cũng như:

find ./tmp/cache -type f | xargs ruby -e 'require "cgi";puts CGI::unescape(ARGV.sort.join("\n")).gsub(/.*tmp\/cache\/\w*\/\w*\//,"")' 

Sử dụng regex để xóa sẽ cho phép bạn xóa hầu hết các khóa, nhưng để gỡ lỗi đôi khi thật tuyệt khi thấy các khóa thực mà bạn đang lưu trữ nếu bạn đang sử dụng các phím phức tạp.

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