Carica gli asset su S3 dopo l'aggiornamento nel browser

Dopo aver spostato le immagini e le risorse (js) del mio sito su S3, ho provato a eseguire l’aggiornamento del forum utilizzando l’interfaccia /admin/upgrade. L’aggiornamento è andato a buon fine, ma sembra che le risorse non siano state caricate nel bucket S3, rendendo il sito non disponibile finché non ho ricostruito l’applicazione da riga di comando.

Ho impostato un hook che si occupa di questo per me. Sarebbe utile avere una funzionalità simile anche nell’interfaccia web. Non so se sia già presente; se lo è, fatemelo sapere. :slight_smile:

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

No, non puoi spostare gli asset su S3 dall’area di amministrazione. Dovrai farlo tramite SSH, poiché sono necessarie attività aggiuntive al momento di questa migrazione, a meno che tu non stia eseguendo l’operazione su un’installazione pulita.

Ah, capisco. Mi piaceva il modo senza interruzioni di aggiornamento fino a quando non sono passato a S3. C’è un modo per non servire JS tramite S3 e solo le immagini?

Non è possibile servire JS tramite S3. Con S3 è possibile solo caricare e servire file multimediali (immagini, documenti, video, ecc.).

Per JS è necessario utilizzare una CDN, ad esempio CloudFront.

Sì, non sto servendo JS direttamente da S3; è archiviato in S3 e poi distribuito tramite CDN. Ciò che volevo chiedere è se posso archiviare JS localmente e distribuirlo tramite CDN, conservando su S3 solo i file multimediali.

Stai sbagliando tutto, di nuovo.
Discourse JS è destinato a essere servito direttamente tramite CDN, con l’installazione di Discourse come origine di pull. Non so come potresti mettere JS su S3, ma tieni presente che JS viene rigenerato ad ogni rebuild. Qualsiasi cosa servissi tramite S3 sarebbe probabilmente obsoleta e rischieresti di creare ulteriori problemi.

È iniziato a succedere dopo aver configurato le impostazioni S3 seguendo questa guida: Configure an S3 compatible object storage provider for uploads

È per questo che hanno aggiunto l’hook after_assets_precompile per caricare gli asset aggiornati su S3.

Come posso risolvere? Restituisce un errore 404 se provo ad accedere a qualsiasi asset tramite il server locale. Deve essere fatto tramite S3. Altrimenti avrei impostato una regola di routing edge sul mio CDN per recuperare le richieste di asset dal dominio locale.

Se hai letto il titolo del post, ‘Object Storage per i caricamenti’, è già chiaro dal titolo stesso.

Cosa intendi per dominio locale? Dove è installato il tuo Discourse?

Per dominio locale intendevo il server su cui è installato Discourse, come se i file JS fossero locali al server nginx e non su S3.

Purtroppo, l’argomento menzionato non lo fa, anche se è effettivamente intitolato “utilizzo di object storage per gli upload”. Se configuri il tuo forum secondo le istruzioni contenute in quell’argomento, è necessario che le risorse vengano caricate su S3.

Come posso configurarlo in modo da poter mantenere i file JS nel server di installazione di Discourse?