Le immagini non sono state caricate dopo la configurazione dei caricamenti S3

Ciao. Abbiamo appena migrato da Discourse EC2 a Discourse ECS (servizio container). Quando eravamo su EC2, S3 Uploads non era ancora configurato. Prima della migrazione, abbiamo copiato tutte le immagini da EC2 al bucket S3 (con accesso pubblico). Tuttavia, dopo aver eseguito la migrazione con S3 Uploads abilitato (ancora senza CDN), abbiamo notato che le immagini (e gli avatar) non venivano caricate affatto.

app.yml contiene:

  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

L’esecuzione dei seguenti comandi nel container non ha risolto il problema:

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

Abbiamo inoltre notato una differenza tra gli URL delle immagini (Discourse utilizzava ancora gli URL “local uploads in EC2”).

Questo è il link su S3: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Link su Discourse (URL ancora proveniente dagli upload EC2): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

L’errore nel browser è: 404 NOT FOUND

Come possiamo configurare Discourse affinché utilizzi gli URL S3 corretti per le immagini?

Hai eseguito il task rake di migrazione su S3?

Lo farei su ec2 prima di procedere con la migrazione.

1 Mi Piace

Ciao Jay. Ho provato a eseguire il comando su ECS, ma ho riscontrato un errore:

Volevo solo chiedere: questo comando va eseguito solo su EC2? Esiste un altro modo per migrare i file caricati o aggiornare gli URL delle immagini? Attualmente l’istanza EC2 è arrestata e l’attuale configurazione ECS utilizza già il dominio, il database e la cache, quindi non sono sicuro che sia possibile reindirizzare dominio, database e cache all’EC2 precedente (per poi ricostruire) senza tempi di inattività. Grazie.

Volete eseguire il comando su un’istanza che abbia accesso alle immagini. Oh, ma se le avete spostate manualmente su S3, allora potrebbe essere necessario intervenire direttamente sulla tabella uploads.

Sto lavorando su una guida con le istruzioni per spostare i dati da un bucket a un altro, che potrebbe esservi utile per risolvere il problema; tuttavia, dovrete adattare tali istruzioni per tenere conto del passaggio da locale a bucket anziché da bucket a bucket.

Se dovessi fatturarvi un tariffa fissa per il lavoro, probabilmente chiederei 4 ore, anche se, se pagaste a ore, potrebbe bastarne solo una.

Oh! Scusate, me ne sono appena accorto. Se l’EC2 utilizza lo stesso database, allora potreste riuscire a riavviarlo (lasciando l’ECS invariato) ed eseguire lì il task migrate-to-s3; prima dovrete inserire tutte le variabili relative a S3 nelle variabili d’ambiente, come descritto in Utilizzo dello storage oggetti per gli upload (S3 e cloni). Questa è probabilmente la soluzione più semplice. Vi consiglio di eseguire un backup solo del database prima di iniziare.

1 Mi Piace

Ciao Jay. Grazie per la risposta. Ho capito. Penso che funzionerĂ .

1 Mi Piace