Re-cuisson anciens posts : nouvelle URL S3 CDN non extraite après renommage bucket S3.

Après avoir installé Discourse (2.7.0.beta1) et importé d’anciens messages de Google Groups, j’ai ajouté la configuration du bucket/clé S3 (mais pas d’URL CDN) et exécuté

rake uploads:migrate_to_s3

ce qui semblait fonctionner parfaitement. Toutes les images ont été téléchargées vers S3 et Discourse tentait d’y accéder via une URL S3 générée automatiquement — quelque chose comme

https://ortus-discourse.s3.dualstack.us-west-2.amazonaws.com/original/1X/75747ca17a3ca01f298f836691e1990916bafccb.png

Ensuite, j’ai renommé le bucket (en ortus-discourse-uploads) et configuré une distribution Cloudfront devant celui-ci avec un CNAME configuré via Cloudflare appelé

https://communitycdn.ortussolutions.com/

Le CNAME, Cloudfront et S3 fonctionnent tous parfaitement. Des URLs comme celle-ci servent correctement l’une des images du bucket :

https://communitycdn.ortussolutions.com/original/1X/75747ca17a3ca01f298f836691e1990916bafccb.png

Cependant, le problème est que Discourse reste bloqué sur l’ancien domaine ortus-discourse.s3.dualstack.us-west-2.amazonaws.com (qui ne fonctionne plus car le bucket a été renommé), et peu importe le nombre de fois où je reconstruis le conteneur ou je récuise les anciens messages, je n’arrive absolument pas à faire en sorte que Discourse utilise la nouvelle URL CDN. J’ai cherché sur Google pendant une journée et j’ai probablement récuit une douzaine de fois (à l’intérieur du conteneur app) avec différents paramètres. Chaque fil de forum donne le même conseil : reconstruire et récuire, mais cela ne fonctionne pas.

Ce ne sont pas seulement les images dans les messages qui sont brisées ; même la balise <link rel="icon" type="image/png" href=""> et le logo du site restent bloqués sur l’ancien domaine et n’utilisent pas l’URL CDN S3.

Voici mes paramètres S3 actuels :

  DISCOURSE_S3_ACCESS_KEY_ID: '********'
  DISCOURSE_S3_SECRET_ACCESS_KEY: '******'
  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_ENABLE_S3_UPLOADS: true
  DISCOURSE_S3_BUCKET: 'ortus-discourse-uploads'
  DISCOURSE_S3_UPLOAD_BUCKET: 'ortus-discourse-uploads'
  DISCOURSE_S3_BACKUP_BUCKET: 'ortus-discourse-backups'
  DISCOURSE_S3_REGION: 'us-west-2'
  DISCOURSE_S3_CDN_URL: https://communitycdn.ortussolutions.com

  DISCOURSE_CDN_URL: https://community.ortussolutions.com

J’ai même essayé de mapper l’ancienne URL vers la nouvelle dans les messages comme ceci :

rake posts:remap["ortus-discourse.s3.dualstack.us-west-2.amazonaws.com","communitycdn.ortussolutions.com"]

mais la commande a indiqué 0 message affecté.

Nulle part dans mes variables d’environnement ou mes paramètres de base de données, je n’ai rien qui fasse référence à l’ancien nom de bucket ortus-discourse, donc je ne comprends pas d’où Discourse tire cette information. Je suis nouveau sur Discourse et je ne suis pas développeur Ruby, donc je n’ai pas creusé plus loin que ce que je peux voir dans mon app.yml, l’interface d’administration et la sortie des commandes rake que j’ai trouvées sur les forums.

Quelle est la valeur de ces uploads dans la table Uploads ?

./launcher enter app
rails c
Upload.all.sample(10).pluck(:url)

@Falco Merci pour ta réponse. Voici la sortie de cette commande.

root@discourse-app:/var/www/discourse# rails c
Upload.all.sample(10).pluck(:url)
[1] pry(main)> Upload.all.sample(10).pluck(:url)
=> ["//ortus-discourse.s3.dualstack.us-west-2.amazonaws.com/original/1X/52b3aff4e63a7e38bef42d469bafd1ed7c1cc1a2.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/9f90374a280a4681332bcd2191b8de43462f8776.png",
 "//ortus-discourse.s3.dualstack.us-west-2.amazonaws.com/original/1X/29691fba566fc998a966aa93859753e3cf0b8528.cfc",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/6ae912ced40d60adc1356c1d7acf144b0fa0985a.jpeg",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/4dfe5b48fc8cb5d79880d70355c34d7ed02be812.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/897c4b4e755c1c8e93224a27187dc631a02e4388.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/59886f322e6834b567d473138108fab6e0f33764.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/e3e3429d63155cf0d850e161846d187bc6f273ea.jpeg",
 "//ortus-discourse.s3.dualstack.us-west-2.amazonaws.com/original/1X/1b701869b4b235daa8d6a9a7728766f3b4e69814.txt",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/c83aaee941462d47ef91f0c6448257d07487b231.png"]
[2] pry(main)>

Il y a donc effectivement pas mal de fichiers avec l’ancien bucket.

La remapping dont vous avez besoin devrait être :

./launcher enter app
rails c
DbHelper.remap("ortus-discourse.s3.dualstack.us-west-2.amazonaws.com", "ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com")

Veuillez effectuer une sauvegarde avant, car une telle opération ne peut pas être annulée.

2 « J'aime »

@Falco Merci encore. J’ai exécuté deux remappages :

DbHelper.remap("ortus-discourse.s3.dualstack.us-west-2.amazonaws.com", "communitycdn.ortussolutions.com")
DbHelper.remap("ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com", "communitycdn.ortussolutions.com")

J’ai reconstruit l’image et cela a résolu des problèmes comme le logo de l’en-tête du site. Je relance maintenant la réélaboration de tous les messages pour voir si cela corrige les images des messages, mais cela prendra un certain temps.


Alors, en attendant la réélaboration, qu’est-ce qui a mal tourné ici ? S’agit-il d’un bug dans Discourse ayant fait que mes téléchargements sont restés bloqués sur l’ancienne URL et n’ont pas pu passer à la nouvelle ?

J’ai lu des publications comme celle-ci qui parlaient de changer une URL CDN, mais elles ne mentionnaient que le remplacement de chaînes dans les messages (ce qui n’a pas fonctionné) et ne parlaient pas du tout du remappage via DBUtil. How do I change the legacy CDN URLs of images in posts?

J’ai même essayé de relancer le script rake d’importation vers S3, mais j’ai reçu une erreur (désolé, je n’ai pas pris note de celle-ci à l’époque).

J’ai même trouvé un script rake migrate_from_s3 que j’ai presque exécuté pour voir si je pouvais repartir de zéro, mais j’ai ensuite trouvé un post sur le forum ici indiquant que cela corromprait ma base de données si je l’exécutais, alors je l’ai laissé de côté.

Je ne vois pas ce que j’aurais dû faire différemment ni quel post sur le forum aurait pu me répondre. (J’ai vraiment vraiment essayé de résoudre ce problème par moi-même avant de poster ici !)

Malheureusement, le recalcul n’a pas semblé résoudre le problème des images intégrées dans les publications. Ce qui est intéressant, c’est que si je sélectionne une ancienne publication et que je la modifie, je vois l’image représentée de la manière suivante :

![COMMANDBOXERROR.png|1169x984](upload://yTDVQSa4wbIeLGEZvE7muXe8sAJ.png)

mais lors de l’affichage de la publication, il n’y a qu’un grand espace vide dans la publication qui pointe vers :

https://community.ortussolutions.com/images/transparent.png

C’est un changement assez récent. La majeure partie d’hier, ces images pointaient simplement vers l’ancienne URL S3 incorrecte, mais à un moment donné hier soir ou aujourd’hui, le PNG transparent est apparu.

Hmmmm, ce n’est pas ce que je t’avais dit dans ma réponse :face_with_raised_eyebrow:

Dans la table uploads, nous attendons l’emplacement S3, et il n’est remplacé par le CDN que lors du processus de cuisson du Markdown.

Tu as mis le CDN dans la table Uploads, ce qui n’est pas ce que le logiciel fait normalement.

Désolé pour ça. J’ai supposé que tu n’avais pas lu assez attentivement le message d’origine pour voir que j’avais mentionné la distribution Cloudflare et qu’il fallait que je l’ajuste pour utiliser mon URL réelle. Je ne réalisais pas que l’URL indésirable était en fait stockée quelque part dans la base de données. J’étais presque sur le point de répondre pour te demander si c’est bien ce que tu voulais dire, mais il me semblait évident ce que je devais faire.

Pas de souci, je peux facilement les remapper vers l’URL S3. Il s’agit d’une nouvelle installation de Discourse et tout le contenu téléchargé se trouve au même endroit, donc le basculement est simple.

Mes questions concernant ce qui s’est mal passé dans mon message précédent restent valables.

Je pense que c’est aussi simple que cela : nous ne prenons pas en charge la modification du bucket de stockage d’objets.

« Prise en charge » signifie ici que vous ne pouvez pas le modifier en vous attendant à ce que cela fonctionne, et qu’il n’existe ni guide écrit ni tâche rake préemballée pour cela. Donc, si vous avez besoin de changer un bucket, il faudra effectuer des manipulations dans la base de données.

D’accord, c’est compréhensible. Donc, la principale erreur que j’ai commise a été de renommer le bucket S3 et de supposer que la mise à jour du nom du bucket dans l’interface d’administration réglerait tous les problèmes nécessaires. Peut-être qu’un avertissement dans l’interface d’administration lors de la modification du nom du bucket serait utile ici. (J’ai d’abord commencé avec les paramètres dans l’interface d’administration avant de passer à l’utilisation de variables d’environnement, pensant que cela pourrait aider d’une manière ou d’une autre.) Ce n’était certainement pas clair que changer le nom du bucket après le téléchargement poserait problème.

J’ai mappé à nouveau les domaines vers le bon domaine AWS S3.

DbHelper.remap("communitycdn.ortussolutions.com", "ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com")
[1] pry(main)> Upload.all.sample(10).pluck(:url)
=> ["//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/fc05f9be9b783479819fec68b1d8e493110007a4.cfc",
 "/images/d-logo-sketch-small.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/50f0d6f260cdb4ef91e29023d92b46df096ab34e.cfc",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/65d80cddc6dc15b9a4d1b9e9d88cc9a8928c5316.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/a86aa2a12183428f3289caa95787ea16f22e2e4d.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/9f76b5238b147a60c8ad5f65bd7fa4bb6b58d852.png",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/6a4c9b992e6cd8a15ddeaec0d158ebd473164525.zip",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/3a532dec6390d5087ed6154fc0335c2c0f1ea543.zip",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/93420848249ecea2261d405e46f7f450cc02a3af.txt",
 "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/d67c39e06ce624b9deb7625dd041d21cffd96df9.png"]

J’ai reconstruit l’application à nouveau et je suis en train de re-cuire les publications. Je verrai si la 37e tentative porte chance :slight_smile:

1 « J'aime »

Tous les téléchargements ont l’URL correcte du bucket S3, le conteneur a été reconstruit et les 30 000 publications ont été régénérées. Je vois toujours

/images/transparent.png

à la place de toutes mes images.

Lorsque j’édite les publications, cela affiche toujours ceci :

![COMMANDBOXERROR.png|1169x984](upload://yTDVQSa4wbIeLGEZvE7muXe8sAJ.png)

Ce qui est intéressant, c’est que les autres pièces jointes, comme les fichiers zip, fonctionnent maintenant correctement.

Y a-t-il un élément manquant nécessaire pour que les images intégrées dans les anciennes publications fonctionnent ?

Pouvez-vous afficher les attributs de l’objet Upload correspondant à yTDVQSa4wbIeLGEZvE7muXe8sAJ ?

J’aimerais beaucoup, mais j’aurai besoin d’aide pour celle-ci. Je suis développeur, mais pas en Ruby. J’ai trouvé comment afficher tous les attributs d’un téléchargement aléatoire comme ceci :

[17] pry(main)> Upload.all.sample(1)
=> [#<Upload:0x00005633230f8af0
  id: 353,
  user_id: 273,
  original_filename: "helloWorldF.zip",
  filesize: 50542,
  width: nil,
  height: nil,
  url: "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/3a532dec6390d5087ed6154fc0335c2c0f1ea543.zip",
  created_at: Wed, 30 Dec 2020 18:46:31 UTC +00:00,
  updated_at: Wed, 30 Dec 2020 18:46:31 UTC +00:00,
  sha1: "3a532dec6390d5087ed6154fc0335c2c0f1ea543",
  origin: nil,
  retain_hours: nil,
  extension: "zip",
  thumbnail_width: nil,
  thumbnail_height: nil,
  etag: nil,
  secure: false,
  access_control_post_id: nil,
  original_sha1: nil,
  animated: nil,
  verification_status: 1>]

J’ai également trouvé quelques références pour Active Record de ROR pour rechercher des enregistrements spécifiques, mais je n’y trouve aucune donnée qui ressemble de près ou de loin à yTDVQSa4wbIeLGEZvE7muXe8sAJ. Comment puis-je trouver l’enregistrement de téléchargement correspondant ?

Ooh, bonnes nouvelles. En recherchant comment trouver les enregistrements d’Upload, je suis tombé sur ce post qui m’a montré comment convertir la chaîne base62 en hachage sha1.

Il mentionnait des images qui ne montraient que transparent.png et qui avaient été mises en tombeau. Je ne suis pas tout à fait sûr de ce que cela signifie, mais je suppose qu’un processus s’est exécuté pendant la nuit alors que les images étaient cassées et les a marquées comme inutilisées. J’ai pu exécuter

rake uploads:recover_from_tombstone

et il semble que toutes mes images intégrées soient revenues et pointent maintenant vers mon CDN S3 !

Et pour ce que ça vaut, voici comment j’ai trouvé l’enregistrement Upload à partir de la chaîne yTDVQSa4wbIeLGEZvE7muXe8sAJ.

[14] pry(main)> Base62.decode("yTDVQSa4wbIeLGEZvE7muXe8sAJ").to_s(16)
=> "f49428d6af35d7e0414408ccb65e7316f5003215"
[15] pry(main)> Upload.where( "original_filename ilike '%f49428d6af35d7e0414408ccb65e7316f5003215%'" )
=> [#<Upload:0x000056313aa91fe8
  id: 899,
  user_id: 549,
  original_filename: "f49428d6af35d7e0414408ccb65e7316f5003215.png",
  filesize: 25514,
  width: 1169,
  height: 984,
  url: "//ortus-discourse-uploads.s3.dualstack.us-west-2.amazonaws.com/original/1X/f49428d6af35d7e0414408ccb65e7316f5003215.png",
  created_at: Tue, 12 Jan 2021 23:01:35 UTC +00:00,
  updated_at: Tue, 12 Jan 2021 23:01:36 UTC +00:00,
  sha1: "f49428d6af35d7e0414408ccb65e7316f5003215",
  origin: nil,
  retain_hours: nil,
  extension: "png",
  thumbnail_width: 594,
  thumbnail_height: 500,
  etag: "6977f35ddbf39a4399dc76f92a5079d4",
  secure: false,
  access_control_post_id: nil,
  original_sha1: nil,
  animated: nil,
  verification_status: 1>]

Merci encore pour votre aide @Falco. Je suis nouveau sur Discourse, mais vous avez fait preuve de beaucoup de patience et d’entraide :+1:

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.