No se puede descargar el archivo adjunto js

Mismo problema aquí. Tenemos archivos js que se ejecutan en nuestro propio software, nada que pueda hacer algo en un navegador.

Logramos solucionar el problema de descarga de Discourse moviendo todas las cargas a un bucket de S3 y estableciendo s3_use_cdn_url_for_all_uploads en true. Esto esencialmente evita el controlador de URL cortas, que parece ser el obstáculo principal para los archivos js.

En detalle (de mi IA que me guió a través de esto):

  1. Configurar almacenamiento compatible con S3 (por ejemplo, Cloudflare R2)

Discourse no puede servir de forma segura archivos .js desde el disco local. Muévelos a un bucket.

  • Bucket: Crea un bucket privado (por ejemplo, my-discourse-bucket).

  • Claves API: Genera una Clave de Acceso y una Clave Secreta.

2. Configurar un dominio CDN personalizado

En Cloudflare (o tu proveedor), conecta un dominio personalizado a tu bucket (por ejemplo, cdn.example.com). Esto asegura que los archivos se sirvan como activos estáticos mediante una URL directa, evitando el “guardián de seguridad” de Discourse.

3. Actualizar la configuración de Discourse

En Administración → Configuración, configura tus detalles de S3. Crucialmente, habilita lo siguiente para asegurar que Discourse no intente “firmar” las URL con encabezados temporales que puedan romperlas:

  • s3_use_cdn_url_for_all_uploads: Marca esta casilla (Este es el paso más importante).

  • s3_cdn_url: Establece en https://cdn.example.com.

  • s3_region: Usa us-east-1 (para compatibilidad con R2).

4. Migrar cargas existentes (opcional)

Nota: Esto NO funcionó para nosotros por razones desconocidas.

Para arreglar enlaces antiguos en publicaciones existentes, entra en tu contenedor y ejecuta:

Bash

# Dentro de /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

Espero que esto ayude a alguien.