Images perdues lors de la sauvegarde/restauration, changement de domaine, impossible d'en télécharger de nouvelles

Mon groupe utilisait notre Discourse sur un domaine temporaire pendant deux mois, le temps de nous mettre d’accord sur notre vrai nom de domaine. Hier, j’ai tenté de migrer tout le contenu de l’ancien domaine vers le nouveau. Tout le contenu textuel, les comptes utilisateurs et même les liens entre les sujets ont été transférés correctement. Mais maintenant :

  • Tous les anciens嵌dements d’images semblent perdus.
  • Aucun nouvel image ne peut être téléchargé.

Voici ma procédure :

  • J’ai créé une nouvelle application Discourse sur un nouveau droplet DigitalOcean.
  • J’ai connecté le nouveau nom de domaine à ce nouveau droplet.
  • J’ai vérifié que les deux applications Discourse et tous les plugins étaient à jour avec les dernières versions disponibles.
  • J’ai mis l’ancien Discourse en mode lecture seule pour empêcher l’ajout de tout nouveau contenu.
  • J’ai effectué une sauvegarde de l’ancien Discourse.
  • J’ai importé cette sauvegarde dans le nouveau Discourse.
  • J’ai mis à jour l’adresse e-mail de Discourse, passant de l’ancien domaine au nouveau.
  • J’ai lancé un test des notifications, qui ont fonctionné pour le nouveau Discourse.
  • J’ai parcouru tous les paramètres de Discourse pour remplacer toute mention de l’ancien domaine par le nouveau.
  • J’ai configuré l’ancien sous-domaine pour qu’il redirige vers le bon domaine, et j’y ai ajouté temporairement une note avec un lien vers le nouveau Discourse.

Comme indiqué plus haut, la plupart du contenu a été transféré sans problème. Mais un jour plus tard, nous avons constaté que les anciens嵌dements d’images sont perdus et qu’aucune nouvelle image ne peut être téléchargée. Seuls leurs contenus « alt » s’affichent. Voici une capture d’écran d’un exemple :

En cherchant sur Google, il semble qu’il existe plusieurs longs fils de discussion à ce sujet, mais je n’en ai trouvé aucun qui mentionne un changement de nom de domaine et une impossibilité de retélécharger.

Je viens d’essayer de résoudre ce problème en :

  • Me connectant en SSH à la machine.
  • Me plaçant dans le répertoire Discourse et en entrant dans l’application.
  • Exécutant rake posts:missing_uploads. Cela indique :
Looking for missing uploads on: default

0 post uploads are missing.
  • Exécutant rake uploads:missing. Cela affiche une longue liste :
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
  • Exécutant rake uploads:recover_from_tombstone. Cela ne produit aucune sortie.

Je dois avouer que je ne sais pas exactement ce que font ces commandes Rake.

Je peux également constater dans le fichier containers/app.yml que DISCOURSE_HOSTNAME correspond bien au nouveau sous-domaine et au nouveau domaine.

L’exécution de ./launcher rebuild app ne semble rien changer.

Quelqu’un pourrait-il m’aider, s’il vous plaît ? Merci.

Avez-vous essayé une rebake ?

cd /var/discourse
./launcher enter app
rake posts:rebake

Merci pour la suggestion. J’ai justement entré vos commandes, mais je ne vois aucune différence. Les anciennes images ne sont toujours pas visibles. Les nouvelles images échouent toujours lors de l’upload. D’ailleurs, la console du navigateur web affiche une erreur « GET 404 » une fois la tentative d’upload terminée.

Mise à jour :

Je ne sais pas exactement quelle commande a amélioré la situation, mais elle s’est améliorée sans être résolue.

  • Je peux créer et télécharger de nouveaux fichiers des types TXT, DOCX, XLSX, JPG et PNG.
  • La plupart (mais pas tous) des anciens téléchargements de tous types s’affichent et se téléchargent correctement.

Les téléchargements erratiques s’affichaient et se téléchargeaient bien auparavant sans problème. Et ils refusent de s’afficher après un nouveau téléchargement dans de nouveaux messages de test. Par exemple :

Cette image : https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

S’affiche correctement (dans mon Discourse) lorsque l’URL est entrée sur une ligne séparée, comme ci-dessous :

Mais elle disparaît du message après que j’ai terminé le message et rafraîchi la page, ne laissant apparemment qu’une seule ligne vide. L’inspection du code source révèle un élément image avec un attribut SRC défini sur un chemin de mon domaine structuré comme suit : https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. Et l’ouverture de ce chemin dans un nouvel onglet charge une page d’erreur 404 NGINX.

Lorsque je le télécharge depuis sa source originale vers mon ordinateur portable et que je le télécharge sur mon Discourse (comme je vais le faire ici dans ce Discourse ci-dessous), cela échoue sur mon Discourse.

Sur mon Discourse, cela ressemble à ceci :

Et si je fais un clic contrôlé sur cette image échouée et que je clique sur « Ouvrir l’image dans un nouvel onglet », cela charge une page d’erreur 404 NGINX.

Je vois dans cette boîte de dialogue de composition en ce moment que Discourse change l’extension de l’image de JPG en JPEG, mais je ne pense pas que cela ait de conséquence.

Si j’ouvre l’image téléchargée dans l’application Affinity Photo, je l’exporte sans compression sous forme de nouveau JPG, et je la télécharge à nouveau sur mon Discourse, elle s’affiche correctement sur mon Discourse.

Cela suggère pour moi que le problème vient toujours de mon Discourse, et non des fichiers téléchargés.

Je suis tombé sur ce problème lors d’un transfert récent.

La méthode la plus simple, sans compétences techniques, consiste à vous connecter à votre site/hôte d’origine avec FileZilla, puis à naviguer vers :

VAR/Discourse/Uploads

Vous y trouverez des sous-dossiers contenant des images. Je les ai simplement téléchargés depuis l’hôte d’origine et les ai uploadés vers le nouveau.

Une alternative plus rapide consiste à utiliser cette méthode de sauvegarde. C’est un processus manuel, mais cela fonctionne également très bien.

Merci pour votre réponse. Je n’ai jamais utilisé l’application FileZilla. J’utilise l’application Transmit pour le FTP. Cependant, je ne sais pas comment me connecter à mon application Discourse sur mon serveur DigitalOcean via FTP.

Je peux me connecter en SSH à mon serveur et naviguer jusqu’à /var/discourse/, mais il n’y a pas de répertoire uploads à cet endroit.

Même si je déplaçais manuellement les fichiers image de l’ancien emplacement vers le nouveau, comment cela résoudrait-il l’échec du re-téléchargement des mêmes images ?

Ma compréhension très basique de Discourse (et je suis vraiment débutant) est que les images téléchargées sont stockées sur votre site, et qu’une version optimisée de la taille du fichier de l’image est également conservée. Au départ, l’image originale est affichée aux utilisateurs, et à un certain moment, le forum bascule vers une image optimisée (pour moi, cela semblait se produire après 24 heures).

J’ai un peu expérimenté avec les paramètres car je craignais de manquer d’espace de stockage.

Sur votre tableau de bord d’administration, consultez-les (dans la section Fichiers). Il existe divers paramètres pour contrôler la taille et les dimensions des images. Cela pourrait être lié à votre problème d’image erronée (si je comprends bien). Par exemple, votre image reformattée tombe toujours en dehors des critères.

Mon problème lorsque j’ai transféré l’hébergement de Digital Ocean vers Hetzner était que certaines images (et avatars) n’apparaissaient tout simplement pas (similaire à votre première capture d’écran). Ma solution a été de les déplacer via FTP (brutal mais ça a marché). Je ne suis pas sûr à 100 % de la raison. Au début, j’ai déplacé uniquement les images optimisées et cela n’a pas résolu le problème, mais lorsque j’ai déplacé toutes les images, cela a résolu mon problème.

Désolé pour l’erreur de dossier, je le faisais de mémoire. La structure des dossiers est : VAR/Discours/Shared/Standalone/Upload

C’est très facile de se connecter avec un client FTP sur Digital Ocean

Hôte : adresse IP de Discourse
Port : 22
Nom d’utilisateur : root
Mot de passe : votre mot de passe SSH

Comme je l’ai dit, je suis loin d’être un expert, plutôt quelqu’un qui a bricolé avec ces derniers mois.

Il y a des gens ici qui peuvent offrir de meilleurs conseils (et des insights). Mais si tout le reste échoue, cela pourrait valoir la peine d’essayer mon approche.

Ma solution a été de les déplacer via FTP (brutal mais ça a fonctionné). Je ne suis pas sûr à 100 % de la raison. Au début, j’ai déplacé uniquement les images optimisées et cela n’a pas résolu le problème, mais lorsque j’ai déplacé toutes les images, mon problème a été résolu.

Merci pour les instructions plus détaillées sur la façon de me connecter en FTP à mes deux Discourse. Le dossier uploads faisait environ 125 Mo sur l’ancien Discourse et 60 Mo sur le nouveau. J’ai donc copié l’ancien sur le bureau de mon ordinateur portable. Ensuite, j’ai copié son contenu, dossier par dossier, vers le nouveau Discourse, en ignorant les doublons.

Et à ma grande surprise, il semble que cela ait résolu le problème. Tous les téléchargements d’images semblent être réparés, aussi bien dans les fils de discussion antérieurs à ma migration Discourse que dans ceux que j’ai créés aujourd’hui lors du dépannage.

Je pourrais théoriser que Discourse réutilisait des pointeurs préexistants vers un contenu qui a somehow été perdu lors du déplacement. Ainsi, si je téléchargeais exactement le même fichier image, il réutiliserait un pointeur cassé et échouerait à plusieurs reprises. Mais lorsque je l’ai enregistré à nouveau sous un nouveau fichier, cela a réussi car il a stocké une nouvelle copie avec un nouveau pointeur. Peut-être.

Encore merci beaucoup.

Par défaut, les sauvegardes ne contiennent pas d’images optimisées car elles peuvent être régénérées. Les inclure gaspillerait de la bande passante et de l’espace disque.

Dans votre cas, cela aurait été utile de les inclure en activant le paramètre du site include_thumbnails_in_backups avant de créer la sauvegarde.

En alternative, exécuter rake posts:rebake_uncooked_posts après la restauration aurait également fonctionné. Sinon, les images optimisées sont régénérées par un tâche en arrière-plan, mais cela prend du temps… Un message de journal à la fin de la restauration vous l’indique précisément.