aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKohei Suzuki <eagletmt@gmail.com>2015-04-09 00:04:56 +0900
committerKohei Suzuki <eagletmt@gmail.com>2015-04-09 00:04:56 +0900
commit16d7cfb17788bdb9e3bd80d6403e98ac515e539c (patch)
treee821d5a79900a26db58ba40b6020eb50d2c0fb7b
parent0a120a818d413c64ff9867125f0b03788fc306f8 (diff)
downloadrails-16d7cfb17788bdb9e3bd80d6403e98ac515e539c.tar.gz
rails-16d7cfb17788bdb9e3bd80d6403e98ac515e539c.tar.bz2
rails-16d7cfb17788bdb9e3bd80d6403e98ac515e539c.zip
Allow AS::Cache::FileStore#clear without cache directory
Currently `Rails.cache.clear` raises Errno::ENOENT if it's run just after cloning a new Rails project. It should succeed without removing files or directories.
-rw-r--r--activesupport/lib/active_support/cache/file_store.rb1
-rw-r--r--activesupport/test/caching_test.rb6
2 files changed, 7 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/cache/file_store.rb b/activesupport/lib/active_support/cache/file_store.rb
index d08ecd2f7d..e6a8b84214 100644
--- a/activesupport/lib/active_support/cache/file_store.rb
+++ b/activesupport/lib/active_support/cache/file_store.rb
@@ -29,6 +29,7 @@ module ActiveSupport
def clear(options = nil)
root_dirs = Dir.entries(cache_path).reject {|f| (EXCLUDED_DIRS + [".gitkeep"]).include?(f)}
FileUtils.rm_r(root_dirs.collect{|f| File.join(cache_path, f)})
+ rescue Errno::ENOENT
end
# Preemptively iterates through all stored keys and removes the ones which have expired.
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb
index 4953550c45..527538ed9a 100644
--- a/activesupport/test/caching_test.rb
+++ b/activesupport/test/caching_test.rb
@@ -684,6 +684,7 @@ class FileStoreTest < ActiveSupport::TestCase
def teardown
FileUtils.rm_r(cache_dir)
+ rescue Errno::ENOENT
end
def cache_dir
@@ -703,6 +704,11 @@ class FileStoreTest < ActiveSupport::TestCase
assert File.exist?(filepath)
end
+ def test_clear_without_cache_dir
+ FileUtils.rm_r(cache_dir)
+ @cache.clear
+ end
+
def test_long_keys
@cache.write("a"*10000, 1)
assert_equal 1, @cache.read("a"*10000)