django caching django-staticfiles django-pipeline

Django pipeline Cache Busting no está actualizando el archivo en caché/hash



caching django-staticfiles (1)

Básicamente, el hash en el archivo de prevención de caché no se está actualizando.

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

La primera vez que ejecuté el comando collectstatic , creó correctamente un archivo de almacenamiento en memoria caché denominado " main.min.d25bdd71759d.js "

Ahora bien, cuando ejecuto el comando, sin embargo, no se sobrescribe el archivo almacenado en caché (y se actualiza el hash) durante la fase posterior al proceso.

Sigue actualizando " main.min.js ", de modo que main.min.js está al día con mi sistema de archivos. Sin embargo, no se crea un nuevo archivo en caché. Mantiene el mismo hash antiguo aunque el archivo main.min.j s subyacente haya cambiado.

Cuando elimino manualmente el archivo almacenado en caché en AWS, obtengo el siguiente mensaje de ejecutar collectstatic con una verbosidad establecida en 3:

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

settings.DEBUG está establecido en False

¿Por qué no actualizará el hash?


Intente utilizar el almacenamiento de manifiesto en su lugar:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage): pass

De acuerdo con los documentos de django aquí https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorage , no se recomienda el uso de CachedStaticFilesStorage .

Es probable que los nombres de sus archivos estáticos estén en caché. Entonces usa el manifiesto.

No se recomienda CachedStaticFilesStorage; en casi todos los casos, ManifestStaticFilesStorage es una mejor opción. Existen varias penalizaciones de rendimiento cuando se utiliza CachedStaticFilesStorage, ya que una falta de caché requiere archivos hash en tiempo de ejecución. El almacenamiento remoto de archivos requiere varios viajes de ida y vuelta para actualizar un archivo en una falla de caché, ya que se requieren varios accesos de archivos para garantizar que el hash del archivo sea correcto en el caso de rutas de archivos anidados.

Tenga en cuenta que esto también está documentado en django-pipelines http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storages