Subir recursos a S3 después de la actualización en el navegador

Después de mover las imágenes y los recursos (js) de mi sitio a S3, intenté actualizar el foro utilizando la interfaz /admin/upgrade. La actualización se realizó correctamente, pero parece que no se cargaron los recursos en el bucket de S3, lo que dejó mi sitio inaccesible hasta que reconstruí la aplicación desde la shell.
Allí tengo un hook que lo hace por mí. Sería genial tener este tipo de funcionalidad también en la interfaz web. No sé si ya existe; si es así, por favor háganmelo saber. :slight_smile:

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

No, no puedes mover activos a S3 desde el área de administración. Deberás hacerlo a través de SSH, ya que se requieren tareas adicionales durante esta migración, a menos que estés realizando esto en una instalación nueva.

Ah, ya veo. Me gustaba la forma sin interrupciones de actualizar hasta que cambié a S3. ¿Existe alguna manera de no servir archivos JS a través de S3 y solo las imágenes?

No puedes servir JS a través de S3. Solo puedes subir y servir archivos multimedia (imágenes, documentos, videos, etc.) a través de S3.

Para JS, necesitarías una CDN, por ejemplo, CloudFront.

Sí, no estoy sirviendo JS directamente desde S3; está almacenado en S3 y luego se sirve a través de la CDN. Lo que quería preguntar es si puedo almacenar JS localmente y servirlo a través de la CDN, almacenando solo los medios en S3.

Una vez más, lo estás entendiendo todo mal.
El JS de Discourse está diseñado para ser servido directamente a través de CDN, con la instalación de Discourse actuando como origen de extracción. No sé cómo podrías alojar JS en S3, pero ten en cuenta que el JS se regenera al reconstruir. Cualquier cosa que sirvas a través de S3 probablemente estará desactualizada y solo te traerás más problemas.

Empezó a ocurrir después de configurar los ajustes de S3 siguiendo esta guía: Configure an S3 compatible object storage provider for uploads

Por eso añadieron el hook after_assets_precompile para subir los activos actualizados a S3.

¿Cómo puedo solucionar esto? Si intento acceder a cualquier activo a través del servidor local, devuelve un error 404. Debe hacerse a través de S3. De lo contrario, habría configurado una regla de enrutamiento en el borde de mi CDN para que las solicitudes de activos se sirvan desde el dominio local.

Si leíste el título del post, que es “Almacenamiento de objetos para cargas”, ya dice bastante en el título.

¿Qué quieres decir con dominio local? ¿Dónde está instalado tu Discourse?

Por dominio local me refiero al servidor donde está instalado Discourse, es decir, que los archivos JS estaban en el servidor nginx y no en S3.

Desafortunadamente, el tema mencionado no hace eso, aunque de hecho se titula “usar almacenamiento de objetos para subidas”. Si configuras tu foro siguiendo las instrucciones de ese tema, se requiere que los activos se suban a S3.

¿Cómo puedo configurarlo para que pueda mantener los archivos JS en el servidor de instalación de Discourse?