1

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

しかし驚いたことに、collectstaticforを発行するとpipeline、そのテーブルのコンテンツが消去され、独自のstaticfiles:{md5code}キー値が入力されます。(本番環境では、すべてを一掃しない状況を見ました)。しかし、これにより私のキャッシュスキームが機能しなくなります。パイプラインのドキュメントでこれをやめる方法が見つからないようですpipelinepipelineキャッシュ内の のキャッシュ エントリ値はかなり短く、生成されたファイルへのフル パスが含まれているだけです。これらのエントリの有効期限は数時間です。彼らがそこにいてもかまわない、私の持ち物を拭かないでくれ。


追記: 私は 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',
    }
}
4

1 に答える 1

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',
}
于 2016-04-21T17:29:10.997 に答える