我正在研究Django
應用程序,該應用程序使用django-pipeline
來處理瀏覽器的文件緩存問題(以及其他好處)。django-pipeline消除了我在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
並創建了表。由於我有自己的有效性檢查,並且可以自己判斷數據是最新的還是需要重新計算,所以我將條目放入此表中,但沒有到期日期。
但令我驚訝的是,當我爲pipeline
發出collectstatic
時,它清除了該表的內容,並用它自己的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',
}
}