Stesso problema anche per noi. Abbiamo file js che vengono eseguiti nel nostro software, nulla che possa mai fare qualcosa in un browser.
Siamo riusciti a risolvere il problema di download di Discourse spostando tutti i caricamenti su un bucket S3 e impostando s3_use_cdn_url_for_all_uploads su true. Questo aggira essenzialmente il controller short-url che sembra essere l’ostacolo principale per i file js.
Nel dettaglio (dal mio AI che mi ha guidato in questo):
- Configurare l’archiviazione compatibile con S3 (ad esempio Cloudflare R2)
Discourse non può servire in modo sicuro i file .js dal disco locale. Spostali in un bucket.
-
Bucket: Crea un bucket privato (ad esempio
my-discourse-bucket). -
Chiavi API: Genera una Access Key e una Secret Key.
2. Configurare un dominio CDN personalizzato
In Cloudflare (o nel tuo provider), collega un dominio personalizzato al tuo bucket (ad esempio cdn.example.com). Questo garantisce che i file vengano serviti come risorse statiche tramite un URL diretto, aggirando la “sentinella di sicurezza” di Discourse.
3. Aggiornare le impostazioni di Discourse
In Admin → Settings, configura i dettagli S3. Crucialmente, abilita quanto segue per assicurarti che Discourse non tenti di “firmare” gli URL con intestazioni temporanee che potrebbero rompere il funzionamento:
-
s3_use_cdn_url_for_all_uploads: Spunta questa casella (Questo è il passaggio più importante). -
s3_cdn_url: Imposta suhttps://cdn.example.com. -
s3_region: Usaus-east-1(per compatibilità con R2).
4. Migrare i caricamenti esistenti (opzionale)
Nota: Questo NON ha funzionato per noi per motivi sconosciuti.
Per correggere i vecchi link nei post esistenti, entra nel tuo container ed esegui:
Bash
# Dentro /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake
Spero che questo aiuti qualcuno.