Las imágenes no se cargaron después de configurar las cargas de S3

Hola. Acabamos de migrar de Discourse EC2 a Discourse ECS (servicio de contenedores). Cuando estábamos en EC2, la carga en S3 aún no estaba configurada. Antes de la migración, copiamos todas las imágenes desde EC2 al bucket de S3 (con acceso público). Sin embargo, tras realizar la migración con la carga en S3 habilitada (sin CDN todavía), notamos que las imágenes (y los avatares) no se cargaban en absoluto.

app.yml tiene:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

Ejecutar lo siguiente en el contenedor tampoco ayudó:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

También notamos la diferencia entre las URLs de las imágenes (Discourse aún utilizaba las URLs de «cargas locales en EC2»).

Este es el enlace en S3: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Enlace en Discourse (la URL sigue siendo de las cargas de EC2): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

El error en el navegador es: 404 NO ENCONTRADO

¿Cómo configuramos Discourse para que utilice las URLs correctas de S3 para las imágenes?

¿Ejecutaste la tarea de Rake para migrar a S3?

Yo lo haría en la instancia EC2 antes de realizar la migración.

1 me gusta

Hola Jay. Intenté ejecutar el comando en ECS, pero encontré un error:

Solo quería preguntar: ¿esto debe ejecutarse únicamente en EC2? ¿Existe otra forma de migrar las cargas o actualizar las URLs de las imágenes? Actualmente, la instancia de EC2 está detenida y la configuración actual de ECS ya utiliza el dominio y la base de datos/caché, por lo que no estoy seguro de si podemos volver a apuntar el dominio y la base de datos/caché a la antigua EC2 (y luego reconstruir) sin tiempo de inactividad. Gracias.

Querrás ejecutar el comando en una instancia que tenga acceso a las imágenes. Ah, pero si las moviste manualmente a S3, entonces quizás debas realizar algunos ajustes en la tabla de uploads.

He estado trabajando en una guía con instrucciones para mover datos de un bucket a otro que podrías usar para resolver tu problema, aunque deberás modificar esas instrucciones para tener en cuenta tus cambios de local a bucket en lugar de de bucket a bucket.

Si te cobrara una tarifa plana por el trabajo, probablemente cobraría por 4 horas, aunque si pagaras por hora, podría ser solo una.

¡Oh! Lo siento. Acabo de notar esto. Si la instancia EC2 está utilizando la misma base de datos, entonces quizás puedas volver a levantarla (dejando el ECS en su lugar) y ejecutar la tarea migrate-to-s3 allí; primero necesitarás colocar todo lo relacionado con S3 en variables de entorno, tal como se describe en Uso de almacenamiento de objetos para cargas (S3 y clones). Esta es probablemente la solución más sencilla. Recomiendo realizar una copia de seguridad solo de la base de datos antes de comenzar.

1 me gusta

Hola Jay. Gracias por la respuesta. Entendido. Creo que eso funcionará.

1 me gusta