es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Las imágenes estáticas desaparecieron después de usar AWS para el sitio Heroku.

Hice un sitio para Heroku usando Django y logré mantener todas las imágenes y archivos estáticos en Heroku sin ningún problema, pero las imágenes que carga el usuario se eliminaban cuando se reiniciaba dyno; por eso, quería usar AWS para alojar los archivos que carga el usuario.

Este es el código que estoy usando en mi configuración:

AWS_ACCESS_KEY_ID = os.environ.get('my key')
AWS_SECRET_ACCESS_KEY = os.environ.get('my secret key')
AWS_STORAGE_BUCKET_NAME = 'my bucket name';

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.eu-west-1.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

AWS_QUERYSTRING_AUTH = False

Agregué la parte “eu-west-1” en la URL estática porque estaba en la URL del bucket pero no en la fuente de mi sitio para la imagen.

El problema es que ahora la mayoría de mi JavaScript y CSS han desaparecido, al igual que todos mis archivos estáticos que antes estaban solo en Heroku y funcionaban bien. Además, los archivos que carga el usuario tampoco aparecen y la fuente no contiene el “eu-west-1” que agregué (y tampoco funciona sin esa parte).

¿Alguien puede ayudarme a hacer que mis archivos estáticos estén en Heroku como antes mientras que los archivos que carga el usuario estén en AWS?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema de tener archivos estáticos en Heroku y archivos de usuario cargados en AWS, puedes modificar tu código de la siguiente manera:

    Primero, cambia DEFAULT_FILE_STORAGE para que use S3Boto3Storage en lugar de S3StaticStorage. Esto asegurará que los archivos cargados por el usuario se almacenen en AWS mientras que los archivos estáticos permanecen en Heroku.

    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    

    A continuación, actualiza STATIC_URL para que apunte a la URL de tu servidor de Heroku. Esto asegurará que tus archivos estáticos se sirvan desde Heroku.

    STATIC_URL = '/static/'
    

    También puedes eliminar ADMIN_MEDIA_PREFIX ya que no es necesario en Django 3.1 y versiones posteriores.

    # Elimina esta línea
    ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
    

    Con estos cambios, tus archivos estáticos se servirán desde Heroku mientras que los archivos cargados por el usuario se almacenarán en AWS.

Comments are closed.