diff options
author | José Valim <jose.valim@gmail.com> | 2011-10-21 12:42:06 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-10-21 12:42:06 -0700 |
commit | 79d01a8f16e20c556a086a2f07e3ccb4400f9819 (patch) | |
tree | 28e31a1c0a15d4ec1935f914668e1b912cbc276d /activesupport/lib/active_support/cache/file_store.rb | |
parent | b838570bd69ff13d677fb43e79f10d6f3168c696 (diff) | |
parent | ec93f363cab7270c1469b420a52a21e306a89c30 (diff) | |
download | rails-79d01a8f16e20c556a086a2f07e3ccb4400f9819.tar.gz rails-79d01a8f16e20c556a086a2f07e3ccb4400f9819.tar.bz2 rails-79d01a8f16e20c556a086a2f07e3ccb4400f9819.zip |
Merge pull request #3395 from bdurand/fix_file_store_cleanup
Fix ActiveSupport::Cache::FileStore.cleanup to actually work.
Diffstat (limited to 'activesupport/lib/active_support/cache/file_store.rb')
-rw-r--r-- | activesupport/lib/active_support/cache/file_store.rb | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/cache/file_store.rb b/activesupport/lib/active_support/cache/file_store.rb index b431041b76..bc5d94b5a7 100644 --- a/activesupport/lib/active_support/cache/file_store.rb +++ b/activesupport/lib/active_support/cache/file_store.rb @@ -26,11 +26,26 @@ module ActiveSupport FileUtils.rm_r(root_dirs.collect{|f| File.join(cache_path, f)}) end + # Cleanup the cache by removing old entries. By default this will delete entries + # that haven't been accessed in one day. You can change this behavior by passing + # in a +not_accessed_in+ option. Any entry not accessed in that number of seconds + # in the past will be deleted. Alternatively, you can pass in +:expired_only+ with + # +true+ to only delete expired entries. def cleanup(options = nil) options = merged_options(options) - each_key(options) do |key| - entry = read_entry(key, options) - delete_entry(key, options) if entry && entry.expired? + expired_only = options[:expired_only] + timestamp = Time.now - (options[:not_accessed_in] || 1.day.to_i) + search_dir(cache_path) do |fname| + if expired_only + key = file_path_key(fname) + entry = read_entry(key, options) + delete_entry(key, options) if entry && entry.expired? + else + if File.atime(fname) <= timestamp + key = file_path_key(fname) + delete_entry(key, options) + end + end end end |