25

基本的に、キャッシュ無効化ファイルのハッシュは更新されていません。

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage):
     pass

PIPELINE_JS = {
 'main.js': {
    'output_filename': 'js/main.min.js',
    'source_filenames': [
        'js/external/underscore.js',
        'js/external/backbone-1.0.0.js',
        'js/external/bootstrap-2.2.0.min.js',
    ]
  }
}

コマンドを最初に実行したときcollectstatic、「」という名前のキャッシュ無効化ファイルが適切に作成されましたmain.min.d25bdd71759d.js

ただし、コマンドを実行すると、ポスト プロセス フェーズでキャッシュされたファイルの上書き (およびハッシュの更新) に失敗します。

私のファイルシステムで最新のmain.min.jsものになるように、「 」を更新し続けます。main.min.jsただし、新しいキャッシュ ファイルは作成されません。main.min.j基になるs ファイルが変更されても、同じ古いハッシュが保持されます。

collectstaticAWS でキャッシュされたファイルを手動で削除すると、冗長性を 3 に設定して実行すると、次のメッセージが表示されます。

Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js

settings.DEBUGに設定されていますFalse

ハッシュが更新されないのはなぜですか?

4

1 に答える 1

3

代わりにマニフェスト ストレージを使用してみてください。

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    pass

ここのdjangoドキュメントによると、https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorageを使用することはお勧めしませんCachedStaticFilesStorage

静的ファイルのファイル名がキャッシュされている可能性があります。したがって、マニフェストを使用してください。

CachedStaticFilesStorage はお勧めしません。ほとんどの場合、ManifestStaticFilesStorage の方が適しています。CachedStaticFilesStorage を使用すると、実行時にキャッシュ ミスが発生するとファイルのハッシュが必要になるため、パフォーマンスが低下します。ネストされたファイル パスの場合にファイル ハッシュが正しいことを確認するには、複数のファイル アクセスが必要になるため、リモート ファイル ストレージでは、キャッシュ ミス時にファイルをハッシュするために複数のラウンドトリップが必要です。

これは、django-pipelines http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storagesにも記載されていることに注意してください。

于 2018-01-02T16:44:44.687 に答える