1

Я работаю над приложением 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', 
    } 
} 

ответ

2

Определение отдельной кеш для статических файлов исправляет проблему. По умолчанию 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', 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^