gpt4 book ai didi

python - django-pipeline 清除了 Django 数据库缓存中的条目

转载 作者:行者123 更新时间:2023-12-01 03:59:57 25 4
gpt4 key购买 nike

我正在开发一个 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/#database-caching ) 来缓存一些长时间运行的统计计算结果。

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'django_dbcache',
}
}

我执行了createcachetable并创建了表。我将条目放入此表中,没有过期日期,因为我有自己的有效性检查,并且可以自己决定数据是否是最新的,或者是否需要重新计算。

然而,令我惊讶的是,当我为 pipeline 发出 collectstatic 时,它会删除​​该表的内容并用它自己的 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',
}
}

最佳答案

为静态文件定义单独的缓存将解决该问题。默认情况下,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',
}

关于python - django-pipeline 清除了 Django 数据库缓存中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com