Я работаю над приложением Django
, которое использует django-pipeline
для решения проблем кэширования файлов браузеров (а также для других преимуществ).django-трубопровод уничтожает мои записи в кеше базы данных Django
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'bower'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
'pipeline.finders.CachedFileFinder',
)
PIPELINE = {}
PIPELINE['DISABLE_WRAPPER'] = True
PIPELINE['JS_COMPRESSOR'] = 'pipeline.compressors.NoopCompressor'
PIPELINE['CSS_COMPRESSOR'] = 'pipeline.compressors.yuglify.YuglifyCompressor'
PIPELINE['COMPILERS'] = (
'pipeline.compilers.sass.SASSCompiler',
'pipeline.compilers.es6.ES6Compiler',
)
PIPELINE['JAVASCRIPT'] = {
...
}
PIPELINE['STYLESHEETS'] = {
...
}
PIPELINE['SASS_BINARY'] = 'C:\\Ruby22-x64\\bin\\sass.bat'
PIPELINE['BABEL_BINARY'] = 'c:\\Users\\Foobar\\node_modules\\.bin\\babel.cmd'
Пока все хорошо. В последнее время мы решили использовать кеш базы данных Django (https://docs.djangoproject.com/en/1.9/topics/cache/#database-caching) для кэширования некоторых долговременных результатов статистического расчета.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'django_dbcache',
}
}
Я выполнил createcachetable
, и таблица была создана. Я помещаю записи в эту таблицу без даты истечения срока действия, так как у меня есть своя проверка действительности, и я могу решить, действительно ли данные обновлены или их необходимо пересчитать.
К моему удивлению, однако, когда я выпускаю collectstatic
для pipeline
, он стирает содержимое этой таблицы и заполняет ее собственными staticfiles:{md5code}
ключами. (В производстве я видел ситуацию, когда она не уничтожила все). Но это делает мою схему кэширования неработоспособной. Кажется, я не могу найти какие-либо настройки в документации по конвейеру, как это делается, pipeline
. Значения кэширования pipeline
в кэше довольно короткие, просто содержат полный путь к сгенерированным файлам. Срок действия этих записей составляет пару часов. Я не буду возражать против того, чтобы они были там, просто не протирайте мои вещи.
Дополнительное примечание: Я на платформе Windows (см параметры трубопровода выше), но то же самое происходит на сервере Linux.
Дополнение к заметному ответ, зная, что любой человек может связываться с кэшем + staticfiles по умолчанию можно грубо уничтожить его, это даже лучше, чтобы отделить наши и все остальные:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'default-cache',
},
'staticfiles': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'static-files',
},
'my_dbcache': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'django_dbcache',
}
}