Django-Pipeline стирает мои записи в кеше базы данных Django.
Я работаю над Django
приложение, которое использует django-pipeline
для решения проблем кэширования файлов в браузерах (а также для других преимуществ).
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/) для кэширования некоторых длительных результатов статистических вычислений.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'django_dbcache',
}
}
Я казнил createcachetable
и таблица была создана. Я помещаю записи в эту таблицу без даты истечения срока действия, так как у меня есть своя собственная проверка достоверности, и я могу сам решить, являются ли данные актуальными или их необходимо пересчитать.
К моему удивлению, однако, когда я выпускаю collectstatic
за pipeline
, он стирает содержимое этой таблицы и заполняет его собственным staticfiles:{md5code}
ключевые ценности. (В производстве я видел ситуацию, когда не все уничтожали). Но это делает мою схему кэширования не функциональной. Я не могу найти какие-либо настройки в документации конвейера, как остановить pipeline
делая это. pipeline
Значения записи в кеше довольно короткие, они просто содержат полный путь к сгенерированным файлам. Срок действия этих записей составляет пару часов. Я не буду против того, чтобы они были там, просто не стирайте мои вещи.
Дополнительное примечание: я на платформе Windows (см. Настройки конвейера выше), но то же самое происходит на производственном сервере Linux.
Дополнение к помеченному ответу: зная, что любой может испортить кеш по умолчанию + статические файлы могут грубо уничтожить его, еще лучше отделить наш и всех остальных:
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',
}
}
1 ответ
Определение отдельного кэша для статических файлов решит проблему. Django по умолчанию сначала ищет кэш "staticfiles". пример:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'django_dbcache',
},
'staticfiles': {
'BACKEND': "django.core.cache.backends.locmem.LocMemCache",
'LOCATION': 'static-files',
}