storages default_file_storage cloudfront python django caching amazon-s3

python - default_file_storage - Django 1.8 Memoria caché+Amazon S3



django s3 static (1)

He estado investigando un poco y encontré artículos que explican cómo usar la prevención de caché de Django (1.8), pero no explican mi situación.

Estoy usando S3 (y funciona) con la siguiente configuración en settings.py:

STATICFILES_STORAGE= ''pms.s3utils.StaticRootS3BotoStorage''

Para utilizar el almacenamiento en caché, los documentos dicen que tengo que configurar: STATICFILES_STORAGE=''django.contrib.staticfiles.storage.ManifestStaticFilesStorage''

No sé qué configuración usar para usar tanto S3 como el almacenamiento en memoria caché.

¡Gracias!


Así que finalmente encontré una solución.

Para poder subir mis archivos a 2 carpetas diferentes (estáticas y cargadas) en mi bucket S3 tengo esto en mi archivo settings.py :

STATICFILES_STORAGE = ''myapp.s3utils.StaticRootS3BotoStorage'' DEFAULT_FILE_STORAGE = ''myapp.s3utils.MediaRootS3BotoStorage''

Y esto en el archivo myapp.s3utils.py :

from storages.backends.s3boto import S3BotoStorage StaticRootS3BotoStorage = lambda: S3BotoStorage(location=''static'') MediaRootS3BotoStorage = lambda: S3BotoStorage(location=''uploads'')

Pero no pude usar la memoria caché de Django. La solución fue cambiar mi archivo myapp.s3utils.py a:

from storages.backends.s3boto import S3BotoStorage from django.contrib.staticfiles.storage import ManifestFilesMixin class CustomS3Storage(ManifestFilesMixin, S3BotoStorage): pass StaticRootS3BotoStorage = lambda: CustomS3Storage(location=''static'') MediaRootS3BotoStorage = lambda: S3BotoStorage(location=''uploads'')

Básicamente, agrega ManiFestfilesMixin , que le permite utilizar el almacenamiento en memoria caché.

Como nota al margen, puede ver que solo estoy usando el almacenamiento en caché para los archivos estáticos, pero no para los archivos cargados. Es por eso que MediaRootS3BotoStorage llama a la clase S3BotoStorage en lugar de a CustomS3Storage . Lo hago así porque los archivos cargados no se almacenan en mi servidor (los archivos estáticos son), se almacenan directamente en el depósito S3, así que cuando ejecuté el recopilatorio no están en mi servidor, entonces no tengo para agregar el hash a los nombres.