Les images ne se sont pas chargées après la configuration des téléchargements S3

Bonjour. Nous venons de migrer de Discourse EC2 vers Discourse ECS (service de conteneurs). Lorsque nous étions sur EC2, les uploads S3 n’étaient pas encore configurés. Avant la migration, nous avons copié toutes les images depuis EC2 vers le bucket S3 (avec accès public). Cependant, après avoir effectué la migration avec les uploads S3 activés (pas encore de CDN), nous avons constaté que les images (et les avatars) ne se chargeaient pas du tout.

app.yml contient :

  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’exécution de la commande suivante dans le conteneur n’a pas non plus aidé :

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

Nous avons également remarqué une différence entre les URL des images (Discourse utilisait encore les URL des « uploads locaux sur EC2 »).

Voici le lien dans S3 : https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Lien dans Discourse (URL toujours issue des uploads EC2) : https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

L’erreur dans le navigateur est : 404 NOT FOUND

Comment configurer Discourse pour qu’il utilise les bonnes URL S3 pour les images ?

As-tu exécuté la tâche Rake de migration vers S3 ?

Je le ferais sur l’instance EC2 avant la migration.

1 « J'aime »

Salut Jay. J’ai essayé d’exécuter la commande dans ECS, mais une erreur est survenue :

Je me demandais si cela doit être exécuté uniquement sur EC2. Existe-t-il une autre méthode pour migrer les uploads ou mettre à jour les URL des images ? Actuellement, l’instance EC2 est arrêtée et la configuration ECS actuelle utilise déjà le domaine ainsi que la base de données et le cache. Je ne suis donc pas certain que nous puissions réorienter le domaine, la base de données et le cache vers l’ancienne instance EC2 (puis reconstruire) sans interruption de service. Merci.

Vous voudrez exécuter la commande dans une instance ayant accès aux images. Oh, mais si vous les avez déplacées manuellement vers S3, vous devrez peut-être effectuer des modifications sur la table uploads.

Je travaille sur un tutoriel avec des instructions pour passer d’un bucket à un autre, que vous pourriez utiliser pour résoudre votre problème, bien que vous devrez adapter ces instructions pour tenir compte de vos changements locaux vers bucket plutôt que de bucket à bucket.

Si je devais vous facturer un taux forfaitaire pour ce travail, je demanderais probablement 4 heures, bien que si vous payiez à l’heure, cela pourrait n’être qu’une heure.

Oh ! Désolé. Je viens de remarquer cela. Si l’EC2 utilise la même base de données, vous pourriez être en mesure de le redémarrer (en laissant l’ECS en place) et d’exécuter la tâche migrate-to-s3 là-bas ; vous devrez d’abord placer tous les éléments S3 dans des variables d’environnement comme décrit dans Utiliser le stockage d’objets pour les uploads (S3 & Clones). C’est probablement la solution la plus simple. Je recommande de faire une sauvegarde uniquement de la base de données avant de commencer.

1 « J'aime »

Bonjour Jay. Merci pour ta réponse. C’est noté. Je pense que cela fonctionnera.

1 « J'aime »