Un point qui, à première vue en développement, semblait correct était la façon dont les publications avaient été migrées. Dans le navigateur, la plupart paraissent bien, mais en regardant de plus près, il y a beaucoup de balises HTML obsolètes qui cassent le chargement des images, leur importation dans le stockage local, etc.
Existe-t-il une méthode intelligente pour supprimer le balisage HTML après la migration de toutes les publications ?
Autre question : je dois également corriger de nombreuses URLs, en passant de http à https.
Merci pour votre aide. D’ailleurs, le script de fortune que j’ai fourni devrait certainement être amélioré pour mieux gérer le traitement des publications vers le format de publication de Discourse (ce qui n’est pas dans mes compétences).
Il est plus facile de résoudre ces problèmes dans l’outil d’importation. Si vous êtes déjà en production et que ce n’est pas une option, c’est plus compliqué. Vous devez simplement écrire du code pour modifier le texte brut et régénérer les publications. Il n’y a pas de magie, je crains.
Il semble que vous rencontriez le problème décrit ici : Fix broken images for posts created by the WP Discourse and RSS plugins. Ma première réponse dans ce sujet donne des détails sur les causes du problème. Celui-ci affecte les images dans les publications créées avec du HTML. Je vais mettre à jour le titre de ce sujet pour préciser qu’il concerne plus que les publications créées avec le plugin WP Discourse ou un flux RSS.
Idéalement, l’analyseur Markdown de Discourse devrait pouvoir gérer les balises d’image HTML enveloppées dans d’autres balises HTML. Cependant, je pense qu’il s’agit d’un problème difficile à résoudre.
Oui, c’est exactement le phénomène que je rencontre avec mes images brisées à l’intérieur d’autres balises HTML.
J’ai commencé à corriger manuellement, mais c’est fastidieux, et cela est aggravé par le fait que cela remonte le message en haut de la liste des derniers. Cela nécessite une réinitialisation manuelle du remontage, etc.
Je vais donc essayer de comprendre la logique pour supprimer les balises HTML en examinant quelques messages vraiment problématiques. Ensuite, je pourrais avoir besoin d’aide pour automatiser cela dans toute la base de données ; je vais essayer d’utiliser DataExplorer pour résoudre cette partie. DataExplorer permettrait-il d’agir comme un IDE pour effectuer ces transformations de messages ?
Je suis impatient de relever ce défi d’apprentissage.
Non, le plugin Data Explorer vous permet uniquement de lire dans la base de données du site. Il ne vous permet pas d’écrire dans la base de données du site.
Bonjour, j’ai trouvé comment nettoyer manuellement et corriger les images brisées. Cependant, je souhaiterais le faire de manière automatisée.
Ce que je voudrais faire, c’est trouver un moyen de supprimer toutes les balises HTML comme [P] et [/P] ainsi que [BR/].
J’ai cherché sur le forum mais je n’ai rien trouvé de similaire. J’ai aussi examiné les scripts d’importation, mais ils ne contiennent pas d’importateur Discourse vers Discourse pour démarrer. Je pense avoir besoin d’un script qui :
accède à la table des messages,
parcourt tous les messages,
pour chaque message :
– supprime complètement les balises P,
– remplace BR/ par un caractère de nouvelle ligne ?
– gère intelligemment les URLs,
– gère intelligemment les images,
recrée ensuite probablement tous les messages.
Quelqu’un peut-il m’orienter vers une discussion pertinente sur Discourse, ou quelqu’un possède-t-il un script ou des extraits de code pour me lancer ? Je ne suis pas un développeur chevronné, mais je peux modifier des choses qui fonctionnent…
Je partagerai mes résultats avec la communauté une fois mon objectif atteint.
Voici un code qui fait quelque chose de similaire :
posts=Post.where("raw like '%Sent from%using Tapatalk'")
posts.each do |post|
post.raw.gsub!(/^Sent from my.+?using Tapatalk$/,"")
post.save
post.rebake!
end
Je ne pense pas que vous ayez besoin de faire quelque chose de « intelligent » pour les images ou les URL, sauf si elles sont en quelque sorte cassées.
Vous voudrez quelque chose comme :
post.raw.gsub!(/\/?\[p\]/ig,"\n")
pour remplacer [p] et [/p] par une nouvelle ligne (une nouvelle ligne supplémentaire ne nuira pas, mais vous pouvez supprimer le \n si vous pensez n’en avoir pas besoin), mais je n’ai pas testé, donc c’est probablement faux. Vous pouvez tester sur un site comme https://rubular.com/.
Lors de la migration de notre forum, nous avons rencontré d’innombrables problèmes liés aux balises bbcode et aux tags provenant de près de deux décennies de messages.
Nous n’avons pas utilisé la fonction rake remap pour cela et, dans tous les cas, nous avons employé la technique décrite par @pfaffman dans son extrait de code :
L’extrait de code ci-dessus utilisant gsub() résume l’une des meilleures méthodes pour nettoyer les messages bruts après (ou mieux encore, pendant) la migration.
Assurez-vous de tester vos expressions REGEX AVANT de les implémenter réellement sur la base de données et d’avoir une sauvegarde complète avant d’effectuer de telles opérations directement sur votre base de données.
Salut, voici le contenu de mon script cleanup.rb que je lance avec : RAILS_ENV=development bundle exec ruby script/cleanup.rb
Contenu du fichier :
require_relative '../config/environment'
pm = 0
Post.find_each do |test|
test.raw.gsub!(/\u003c(.|\/.)\u003e/i,"")
test.save
test.rebake!
pm = pm + 1
end
puts "cycled through #{pm} posts"
J’ai essayé d/rake posts:rebake qui rebake 1757 posts. Le script parcourt seulement 1712 posts, ce qui correspond aux données importées avec les balises HTML, le reste étant de nouveaux éléments créés dans Discourse.
Je pense que j’y suis presque, mais quand j’inspecte le contenu brut dans l’interface utilisateur, je continue de voir toutes les balises HTML.
J’ai essayé de redémarrer l’environnement et de relancer unicorn, mais sans succès. Si près… si près ;o)
J’ai utilisé votre suggestion Rubular et maintenant regexr.com affiche ce qui suit sur la capture d’écran. Pour l’instant, je me suis concentré sur les balises p et r pour les régler avant d’ajouter les plus complexes.
Lorsque j’ai ajouté une instruction puts dans mon petit fichier cleanup.rb pour afficher le contenu brut de la publication dans l’interface en ligne de commande, j’ai remarqué qu’aucune balise HTML n’était affichée.
Cependant, lorsque je modifie une publication, je vois ce qui suit, avec les balises HTML à droite. Cela ne semble pas être la situation normale, car lorsque je reviens pour modifier la publication que je suis en train de modifier, je ne vois plus les balises HTML…
Ce gsub a besoin d’un g après le /i pour correspondre à plusieurs balises. Mais si ce que vous voyez dans votre puts est différent de ce que vous voyez après l’exécution du script, alors je n’ai pas d’explication.
Si ma mémoire est bonne (et c’est ainsi que nous faisons généralement correspondre les multilignes avec gsub…), une expression régulière Ruby multiligne nécessite m :
/./m - Tout caractère (le modificateur m active le mode multiligne)
Merci, cela a fonctionné du côté de l’expression régulière.
Il semble qu’il y ait deux choses que je ne peux pas expliquer avec ce script :
# Appelez-le comme ceci :
# RAILS_ENV=development bundle exec ruby script/cleanup.rb -> cleanup.log
require_relative '../config/environment'
pm = 0
Post.find_each do |test|
puts test.raw
test.raw.gsub!(/<(.|\/.)>/im,"")
test.save
test.rebake!
pm = pm + 1
end
puts "cycled through #{pm} posts"
Après l’avoir exécuté plusieurs fois, cleanup.log contient toujours 10 instances de <p> dans environ 21 000 lignes de contenu brut des publications. Étrangement, elles ne sont jamais supprimées.
Ce qui est encore plus étrange (pour moi), c’est que lorsque je lance Unicorn et que j’accède au site sur ma machine locale, je vois toujours les balises HTML dans toutes les publications que je vérifie dans la vue brute de l’éditeur.
Il me semble que je ne regarde peut-être pas le même environnement ? Est-ce que d/unicorn consulte un environnement de production local tandis que mon script applique les modifications au développement ?
J’essaie de faire fonctionner cela en utilisant l’environnement de développement avec le guide Docker en local d’abord, avant de passer à mon site en direct.
Cela doit être une erreur majeure de débutant que je néglige.