2011-08-22 6 views
5

Cuando llega el momento de implementar, una mejor práctica es comprimir los activos estáticos (js, css) y moverlos a una CDN. Hay algunas aplicaciones de Django que manejan algunos aspectos (django-compressor, django-pipeline que cada uno viene a la mente), pero cada uno tiene sus propios problemas. Por ejemplo,¿Cuál es la mejor manera de canalizar activos a un CDN con Django?

  • quiere generar contenido dentro del bucle de solicitud/respuesta, incluso cuando la compresión exclusivamente fuera de línea está habilitada.
  • django-pipeline no almacena hashes en ninguna parte, por lo que recorre la ruta en la que escribe los archivos comprimidos, compara los nombres de los archivos con expresiones regulares, ordena las posibles coincidencias y devuelve el último elemento de la lista. ¡Intenta hacer esto desde un CDN! ¡¿Qué?!

El (aparentemente lógica) de flujo de trabajo de tuberías que estoy buscando es la siguiente:

  1. activos Comprimir, usando hashes de contenido para el nombre de archivo
  2. Tiendas de esos nombres de archivo en una memoria caché o un módulo o algo que puede ser fácilmente referenciado cuando es el momento de renderizar el HTML.

No debería tener que tener todos los archivos estáticos en todos mis nodos front-end web: solo el CDN.

En este momento, siento que mi mejor opción es hackear el soporte para el almacenamiento en caché de hash de nombre de archivo en django-pipeline, pero estoy soñando con una solución para este.

¿Cuáles son mis mejores opciones en Django para esto? ¿Hay alguno?

Gracias!

Respuesta

1

¿Está ejecutando Django 1.3? Si es así, puede escribir su propio custom file storage backend que cargue cosas en un CDN. Afortunadamente, si desea utilizar Amazon S3, ¡entonces django-storages ya hace exactamente lo que usted quiere!

6

django-pipeline 1.1.12 ahora está almacenando en caché hash, por lo que debería estar bien, consulte el changelog.

Descargo de responsabilidad: Soy uno del autor de django-pipeline.

Cuestiones relacionadas