whitenoise deploy app python django heroku static

python - deploy - upload django to heroku



Manera correcta de manejar archivos estáticos y plantillas para Django en Heroku (1)

Me estoy moviendo sobre mi aplicación django a Heroku, y me preguntaba cuál es la mejor manera de manejar archivos estáticos. ¿Simplemente los empujo a través de git a Heroku? ¿O debería almacenarlos en SW3 o algo así? Además, ¿qué debería ser el STATIC_ROOT y tal?

¡Gracias!


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

Aquí hay una buena guía para comenzar con S3:

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

Utilice django-storages http://django-storages.readthedocs.org/en/latest/index.html para recopilar archivos estáticos en su depósito S3 y sírvalos en consecuencia.

Estas son las configuraciones necesarias que deberá tener 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 son reemplazados por DEFAULT_FILE_STORAGE y STATICFILES_STORAGE respectivamente y, por lo tanto, no son necesarios. Sin embargo, querrás 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 multimedia en diferentes subcarpetas, esta es una gran solución: https://.com/a/10825691/674794

Deberá establecer MEDIA_URL y STATIC_URL en las carpetas nuevas respectivas, por ej.

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

También querrá ejecutar manage.py collectstatic manualmente y deshabilitar la recopilación automática de datos de Heroku según https://devcenter.heroku.com/articles/django-assets#disabling_collectstatic , ya que la colección de datos heredados de Heroku volverá a cargar cada archivo estático en S3 cada vez que presione incluso si los archivos no han sido modificados, agregue una transferencia fuerte y solicite carga a S3 y desacelere sus impulsos.

¡Entonces simplemente continúe usando {{STATIC_URL}} en sus plantillas como de costumbre y debería estar configurado!

<link href=''{{ STATIC_URL }}css/styles.css'' type=''text/css'' rel=''stylesheet''>

Si quieres comenzar de forma simple y eliges no tomar esa ruta inmediatamente, puedes hacer el truco rápido en tu configuración de URL siguiendo la mencionada publicación de Cesar en Heroku - Manejando archivos estáticos en la aplicación Django , aunque habrá una disminución significativa en el rendimiento de la aplicación.