mirror of
https://github.com/django/django.git
synced 2025-03-13 19:00:45 +00:00
Fixed #16967 -- Made sure CachedStaticFilesStorage repopulates its cache if there was a miss (for example if the cache server went down).
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17067 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
44a4037466
commit
0e2c543979
@ -90,11 +90,14 @@ class CachedFilesMixin(object):
|
|||||||
Returns the real URL in DEBUG mode.
|
Returns the real URL in DEBUG mode.
|
||||||
"""
|
"""
|
||||||
if settings.DEBUG and not force:
|
if settings.DEBUG and not force:
|
||||||
return super(CachedFilesMixin, self).url(name)
|
hashed_name = name
|
||||||
|
else:
|
||||||
cache_key = self.cache_key(name)
|
cache_key = self.cache_key(name)
|
||||||
hashed_name = self.cache.get(cache_key)
|
hashed_name = self.cache.get(cache_key)
|
||||||
if hashed_name is None:
|
if hashed_name is None:
|
||||||
hashed_name = self.hashed_name(name)
|
hashed_name = self.hashed_name(name)
|
||||||
|
# set the cache if there was a miss (e.g. if cache server goes down)
|
||||||
|
self.cache.set(cache_key, hashed_name)
|
||||||
return super(CachedFilesMixin, self).url(hashed_name)
|
return super(CachedFilesMixin, self).url(hashed_name)
|
||||||
|
|
||||||
def url_converter(self, name):
|
def url_converter(self, name):
|
||||||
|
@ -352,6 +352,22 @@ class TestCollectionCachedStorage(BaseCollectionTestCase,
|
|||||||
with storage.staticfiles_storage.open(relpath) as relfile:
|
with storage.staticfiles_storage.open(relpath) as relfile:
|
||||||
self.assertTrue("https://" in relfile.read())
|
self.assertTrue("https://" in relfile.read())
|
||||||
|
|
||||||
|
def test_cache_invalidation(self):
|
||||||
|
name = "cached/styles.css"
|
||||||
|
hashed_name = "cached/styles.93b1147e8552.css"
|
||||||
|
# check if the cache is filled correctly as expected
|
||||||
|
cache_key = storage.staticfiles_storage.cache_key(name)
|
||||||
|
cached_name = storage.staticfiles_storage.cache.get(cache_key)
|
||||||
|
self.assertEqual(self.cached_file_path(name), cached_name)
|
||||||
|
# clearing the cache to make sure we re-set it correctly in the url method
|
||||||
|
storage.staticfiles_storage.cache.clear()
|
||||||
|
cached_name = storage.staticfiles_storage.cache.get(cache_key)
|
||||||
|
self.assertEqual(cached_name, None)
|
||||||
|
self.assertEqual(self.cached_file_path(name), hashed_name)
|
||||||
|
cached_name = storage.staticfiles_storage.cache.get(cache_key)
|
||||||
|
self.assertEqual(cached_name, hashed_name)
|
||||||
|
|
||||||
|
|
||||||
# we set DEBUG to False here since the template tag wouldn't work otherwise
|
# we set DEBUG to False here since the template tag wouldn't work otherwise
|
||||||
TestCollectionCachedStorage = override_settings(**dict(TEST_SETTINGS,
|
TestCollectionCachedStorage = override_settings(**dict(TEST_SETTINGS,
|
||||||
STATICFILES_STORAGE='django.contrib.staticfiles.storage.CachedStaticFilesStorage',
|
STATICFILES_STORAGE='django.contrib.staticfiles.storage.CachedStaticFilesStorage',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user