Rake posts:remap - 0 posts remappés !

Je tente de trouver et de remplacer certaines images brisées restantes après notre migration de forum vers Discourse et j’ai eu beaucoup de succès (j’adore la commande remap !), mais elle ne trouve rien à remplacer pour ces exemples et je ne vois aucune erreur, pouvez-vous vérifier ?

Contenu exemple :

<img src="https://londonbikers.com/images/transparent.png" alt="PICT0738.JPG" data-orig-src="upload://1yz82u6bbkaAQ7xP06qNTmX9qy3.JPG" width="666" height="500" class="d-lazyload">

et

<img src="https://londonbikers.com/images/transparent.png" alt="Rhonda.JPG" data-orig-src="upload://vXQ67D17QssTe5cu6lamJ5XB5Ep.JPG" width="590" height="500" class="d-lazyload">

Je dois le faire en deux passes car je dois conserver le contenu de la balise alt et reconstruire l’élément img autour. Cela échoue lors de la première passe remap :

c.-à-d. RECHERCHER :
<img src="https://londonbikers.com/images/transparent.png" alt="

et REMPLACER par :
<img src="https://londonbikersarchive.blob.core.windows.net/forum-attachments/

J’ai supposé que les guillemets doubles devaient être échappés avec un antislash ? J’ai donc utilisé cette commande :

rake posts:remap["<img src=\"https://londonbikers.com/images/transparent.png\" alt=\"","<img src=\"https://londonbikersarchive.blob.core.windows.net/forum-attachments/"]

Mais on me répond 0 posts remappés ! alors qu’il y a des milliers de tels posts contenant ces éléments. Des idées ?

Ma deuxième passe consisterait ensuite à remapper la fin de la balise de :
width="666" height="500" class="d-lazyload">

vers :
/>

Ah, attendez, certaines de ces images fonctionnent. S’agit-il de la fonctionnalité de pièces jointes de Discourse ? Y a-t-il une logique de rendu personnalisée en jeu, par opposition à ces chaînes HTML stockées dans la base de données ?

Par exemple, ceci affiche une photo :

<img src="https://londonbikers.com/uploads/default/original/1X/25b381a9dc03f023a1c5d0af4f2f3132dfbf45c7.jpg" alt="The_rides_0010.jpg" width="640" height="480" class="d-lazyload">

Mais celle-ci ne fonctionne pas. Je peux avoir le fichier dans un stockage blob cloud, donc je souhaiterais soit l’importer dans Discourse, soit simplement le référencer depuis le stockage blob :

<img src="https://londonbikers.com/images/transparent.png" alt="__2.jpg" data-orig-src="upload://411oUp2Yn6wumJCRAiFptkwTF58.jpg" width="662" height="500" class="d-lazyload">

Ces images sont-elles en raw ?

Je pense que plutôt que de le faire avec remap, vous ferez mieux d’utiliser Ruby dans la console Rails.

Désolé, je n’ai rien compris à tout ça, Jay :slight_smile:

Brut, comme le format de fichier ? Non, juste les formats web habituels. Tu fais quoi dans la console Rails ?

raw est le champ où se trouve le texte que vous voyez dans l’éditeur. Ce que vous remplacez est ce que vous voyez si vous modifiez le post dans l’interface utilisateur, n’est-ce pas ? (cooked est le contenu qui a été traité et qui est affiché.)

Effectuer des opérations pour réécrire les posts. Cela pourrait suffire à vous rendre dangereux :

bps = Post.where("raw like '%//SOME-STRING%'")
bps.each do |post|
  post.raw.gsub!(/OLD/,'NEW')
  post.save
end

L’avantage par rapport à la tâche rake est que vous n’avez pas à gérer plusieurs niveaux d’échappement.