私は、ブラウザのファイル キャッシングの問題に対処するために (およびその他の利点のために)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
すると、テーブルが作成されました。独自の有効性チェックがあり、データが最新かどうか、または再計算する必要があるかどうかを自分で判断できるため、有効期限なしでこのテーブルにエントリを配置しています。
しかし驚いたことに、collectstatic
forを発行すると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',
}
}