Manera adecuada de manejar archivos estáticos y plantillas para Django en Heroku

Me estoy moviendo sobre mi aplicación django a Heroku, y me estaba preguntando cuál es la forma correcta de manejar archivos estáticos. ¿Acabo de empujarlos a través de git a Heroku? ¿O debería guardarlos en SW3 o algo así? Además, ¿qué debería ser STATIC_ROOT y tal?

¡Gracias!

Debe almacenarlos externamente en un servicio como S3, mientras que Heroku puede servir archivos estáticos, no está diseñado para hacerlo.

Aquí hay una buena introducción para comenzar con S3:

https://devcenter.heroku.com/articles/s3

Utilice django-storages http://django-storages.readthedocs.org/en/latest/index.html para recostackr archivos estáticos en su depósito de S3 y servirlos en consecuencia.

Estas son las configuraciones necesarias que necesitarás para S3:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' AWS_ACCESS_KEY_ID = 'access-id' AWS_SECRET_ACCESS_KEY = 'secret-key' AWS_STORAGE_BUCKET_NAME = 'bucket-name' AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files 

MEDIA_ROOT y STATIC_ROOT están reemplazados por DEFAULT_FILE_STORAGE y STATICFILES_STORAGE respectivamente y, por lo tanto, no son necesarios. Sin embargo, querrá establecer MEDIA_URL y STATIC_URL en algo como

 STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/' ADMIN_MEDIA_PREFIX = 'https://bucket-name.s3.amazonaws.com/static/admin/' 

Si desea almacenar sus archivos estáticos y de medios en diferentes subcarpetas, esta es una gran solución: https://stackoverflow.com/a/10825691/674794

Querrá configurar MEDIA_URL y STATIC_URL en las nuevas carpetas respectivas, por ejemplo,

 MEDIA_URL = 'https://bucket-name.s3.amazonaws.com/media/' STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/' 

También querrá ejecutar manualmente manage.py collectstatic y deshabilitar el automatic collectstatic de Heroku según https://devcenter.heroku.com/articles/django-assets#disabling_collectstatic , ya que el collectstatic de Heroku reupload cada archivo estático a S3 cada vez que Empuje incluso si los archivos no se han modificado, agregando una transferencia considerable y solicite la carga a S3 y disminuyendo la velocidad de sus impulsos.

Luego, simplemente sigue usando {{STATIC_URL}} en tus plantillas como de costumbre, ¡y deberías configurarlo!

  

Si quieres comenzar de manera simple y optar por no tomar esa ruta inmediatamente, puedes hacer un truco rápido en la configuración de tu URL siguiendo el post de Cesar en Heroku – Manejo de archivos estáticos en la aplicación Django , aunque habrá una disminución significativa en el rendimiento de la aplicación.