Voici où j’en suis :
Après avoir essayé d’exécuter post.rebake!(invalidate_broken_images: true) sur mes 40000 publications contenant la chaîne [img], cela a fonctionné pour de nombreuses images… Mais loin de toutes, bien qu’elles soient hébergées sur le même service d’hébergement d’images externe.
Par exemple, j’ai des milliers de liens “fonctionnels” casimages (qui pointent vers des images valides et affichent les images dans l’aperçu du compositeur lors de la modification), cassés dans la version cuite des publications, qui ont été correctement affichés et téléchargés sur le serveur grâce à mon script, mais j’en ai aussi beaucoup d’autres pour lesquels cela n’a tout simplement pas fonctionné, et je ne sais pas pourquoi.
Post.where('raw LIKE ?', '%[img]%').find_each do |p|
p.rebake!(invalidate_broken_images: true)
end
J’ai également des liens d’images provenant d’autres hébergeurs d’images qui ont été téléchargés, et certains pour lesquels cela n’a pas fonctionné.
J’ai échoué à voir une différence entre ces publications et ces liens d’images. Elles avaient toutes des images fonctionnelles, et le fait qu’elles utilisaient le même hébergeur d’images m’a interpellé.
J’ai essayé l’opération à plusieurs reprises et les résultats étaient incohérents, indépendamment des services d’hébergement externes… Certaines images ont été téléchargées, d’autres non. Cela semblait aléatoire.
Cela me rappelle un peu le problème rencontré par @Amethi : Some linked images not displaying/show as broken - #8 by Amethi où cela n’a fonctionné que pour certaines images sans aucune explication.
Je ne parlerai ici que de casimages, bien que mon forum importé utilisait divers autres hébergeurs d’images.
J’ai donc pensé que peut-être casimages bloquait temporairement mon IP si j’essayais de récupérer trop d’images de leurs serveurs. Cela pourrait expliquer à la fois le fait que cela n’ait pas fonctionné pour toutes les images et le caractère aléatoire du succès du téléchargement des images depuis mon serveur.
Il y a même eu des cas où l’option Rebuild HTML fonctionnait - d’abord seulement -, les images s’affichaient alors au lieu de montrer une icône d’image cassée, bien qu’elles soient toujours hébergées sur leur service d’hébergement externe, mais lorsque la tâche Sidekiq de récupération des images externes était déclenchée, cela cassait les images.
Idem en utilisant des scripts rail avec rebake!(invalidate_broken_images: true)
![]()
J’essaie donc actuellement une approche plus lente, où j’attends 5 secondes entre chaque commande rail rebake! :
total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
p.rebake!(invalidate_broken_images: true)
print "#{i}/#{total}"
print "\r"
i +=1
sleep(5)
end
Je verrai dans environ 60 heures si cela s’est amélioré…
J’aimerais comprendre les fondements de mon problème ici et pourquoi un rebake “normal” ne parvient pas à télécharger une image sur le serveur (si je ne suis pas temporairement bloqué par casimages).
Notez que cette fois, le certificat du serveur de casimages semble correct ![]()
Je ne comprends pas non plus ce que fait réellement invalidate_broken_images. Je ne suis pas très familier avec le code de Discourse.
J’ai regardé le code pour voir l’occurrence de invalidate_broken_images et j’ai vu ces fichiers :
Pourquoi recherche-t-il spécifiquement la chaîne <img> ? Mes publications proviennent d’une importation phpBB et la version brute ne contient que le bbCode [img], pas les balises <img> ; alors comment cela aurait-il un effet (et cela l’a eu, voir mon message précédent) sur mes publications ? ![]()
Je ne comprends pas non plus vraiment la différence entre ces deux méthodes (?) :
Il semble indiquer que rebake définit les arguments par défaut sur false, et que rebake! définit l’argument par défaut sur true.
Comment ces deux éléments sont-ils liés (je connais d’ailleurs le but du caractère ! en ruby), et pourquoi sont-ils dans des fichiers différents ?
Mon objectif est uniquement de comprendre pourquoi mes images externes sont parfois téléchargées, parfois non, et si je peux trouver un moyen fiable de les télécharger correctement et automatiquement, même si cela implique de télécharger une image toutes les heures. ![]()
Cela fait presque deux semaines que je travaille sur ce problème et cela me rend fou (ainsi que les personnes pour lesquelles j’ai migré leur serveur). ![]()
De plus, il n’y a rien dans les logs de Discourse, à part plusieurs messages Sidekiq is consuming too much memory (using: 592.25M). Notez que je travaille sur Ubuntu via WSL sous Windows 10, mais j’ai l’intention d’utiliser une solution fonctionnelle (si j’en trouve une…) sur notre VPS.