Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django pipeline Cache Busting is not Updating Cached File/Hash

Basically, the hash on the cache busting file is not updating.

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',
    ]
  }
}

When I first ran the collectstatic command, it properly created a cache busting file named "main.min.d25bdd71759d.js

Now when I run the command, however, it is failing to overwrite that cached file (and update the hash) during the post process phase.

It keeps updating "main.min.js", such that main.min.js is current with my filesystem. A new cached file, however is not created. It keeps the same old hash even though the underlying main.min.js file has changed.

When I manually delete the cached file on AWS, I get the following message from running collectstatic with verbosity set to 3:

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

settings.DEBUG is set to False

Why won't the hash update?

like image 438
Ben Avatar asked Jul 29 '13 17:07

Ben


1 Answers

Try using the manifest storage instead:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    pass

According to the django docs here https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorage it's not recommended to use CachedStaticFilesStorage.

Your files names for your static files are probably getting cached. So use the manifest one.

CachedStaticFilesStorage isn’t recommended – in almost all cases ManifestStaticFilesStorage is a better choice. There are several performance penalties when using CachedStaticFilesStorage since a cache miss requires hashing files at runtime. Remote file storage require several round-trips to hash a file on a cache miss, as several file accesses are required to ensure that the file hash is correct in the case of nested file paths.

Note this is also documented at django-pipelines http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storages

like image 194
dalore Avatar answered Oct 23 '22 12:10

dalore