Rake-Posts: remap – 0 Posts remapped!

Ich versuche, einige defekte Bilder zu finden und zu ersetzen, die von unserer Forum-Migration zu Discourse übrig geblieben sind, und habe dabei großen Erfolg gehabt (ich liebe den remap-Befehl!). Aber er findet für diese Beispiele nichts zum Ersetzen, und ich kann keinen Fehler erkennen. Sie auch?

Beispielinhalt:

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

und

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

Ich muss dies in zwei Durchgängen erledigen, da ich den Inhalt des alt-Tags behalten und das img-Element neu darum herum aufbauen muss. Der erste remap-Versuch schlägt fehl:

Also FINDEN:
<img src="https://londonbikers.com/images/transparent.png" alt="

und ERSETZEN durch:
<img src="https://londonbikersarchive.blob.core.windows.net/forum-attachments/

Ich habe angenommen, dass doppelte Anführungszeichen mit einem Backslash escape werden müssen? Also habe ich diesen Befehl verwendet:

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

Aber ich erhalte die Meldung 0 posts remapped!, obwohl es Tausende solcher Beiträge mit diesen Elementen gibt. Haben Sie eine Idee?

Mein zweiter Durchgang wäre dann, das Ende des Tags von:
width="666" height="500" class="d-lazyload">

zu ersetzen durch:
/>

Oh, moment, einige dieser Bilder werden angezeigt. Ist das die Discourse-Anhangsfunktionalität? Läuft hier eine benutzerdefinierte Rendering-Logik, anstatt dass es sich um HTML-Strings in der Datenbank handelt?

Zum Beispiel wird hier ein Foto angezeigt:

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

Dieses hier wird jedoch nicht angezeigt. Ich könnte die Datei im Cloud-Blob-Speicher haben und möchte sie entweder in Discourse importieren oder einfach auf den Blob-Speicher verweisen:

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

Sind diese Bilder im raw?

Ich denke, du wirst besser damit fahren, Ruby in der Rails-Konsole zu verwenden, anstatt es mit remap zu machen.

Tut mir leid, ich habe nichts davon verstanden, Jay :slight_smile:

Roh, wie im Dateiformat? Nein, nur die üblichen Webformate. Was genau machst du in der Rails-Konsole?

raw ist das Feld, in dem der Text steht, den du im Editor siehst. Das, was du ersetzt, ist das, was du siehst, wenn du den Beitrag in der Benutzeroberfläche bearbeitest, oder? (cooked ist der verarbeitete Inhalt, der angezeigt wird.)

Ich führe Aktionen aus, um Beiträge neu zu schreiben. Das könnte gerade genug sein, um dich gefährlich zu machen:

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

Der Vorteil gegenüber der Rake-Aufgabe ist, dass du nicht mehrere Ebenen von Escaping durchlaufen musst.