Ich habe mein vBulletin 5 Forum erfolgreich in Discourse importiert. Während das allgemeine Import-Skript gut funktioniert, treten Fehler beim Importieren von Anhängen auf. Die Anhänge werden in meiner Datenbank gespeichert und haben die folgenden Erweiterungen: java, html, jpg, png, txt, rtf, zip, js und xml.
Nach dem Debugging der Aktion import_attachment habe ich festgestellt, dass nur Anhänge mit der Erweiterung java korrekt importiert werden. Das Skript schlägt bei Anhängen mit anderen Erweiterungen fehl.
Sind andere Mitglieder der Community auf Probleme beim Importieren von Anhängen mit diesen Dateierweiterungen gestoßen? Hat jemand Einblicke, warum das Skript bei diesen speziellen Dateitypen fehlschlagen könnte?
Hier ist ein kurzer Überblick über das Problem:
Die ersten drei Dateien in meiner Datenbank haben die Erweiterung java und werden ohne Probleme importiert.
Das Skript schlägt fehl, wenn es auf eine Datei mit der Erweiterung jpg stößt.
Ich habe eine Debugging-Anweisung zu upl_obj hinzugefügt
begin
upl_obj = create_upload(post.user.id, filename, real_filename)
if upl_obj&.persisted?
html = html_for_upload(upl_obj, real_filename)
if !post.raw[html]
post.raw += "\n\n#{html}\n\n"
post.save!
UploadReference.ensure_exist!(upload_ids: [upl_obj.id], target: post)
end
else
puts "Fehler beim Erstellen des Uploads für #{filename}: #{upl_obj.errors.full_messages.join(", ")}"
next
end
rescue => e
puts "Fehler bei der Verarbeitung der Datei #{filename}: #{e.message}"
next
end
Meine Vermutung, die falsch sein könnte, ist, dass ein Problem mit der Zeilenumbruchkodierung die Daten in den Binärdateien falsch macht, da ein Zeilenumbruchzeichen als Daten kodiert wird. Wenn nur ASCII-Dateien funktionieren, ist das eine gute Vermutung.
Es ist also kein Discourse-Problem, sondern ein MySQL-Problem.
Fast – nicht die Zeilenumbruchkodierung, sondern die Behandlung als Text, und daher beschädigt.
EF BF BD ist die UTF-8-Byte-Sequenz für ‘ERSATZEINHEIT’ (U+FFFD). Dies deutet darauf hin, dass eine Datei als Text und nicht als Binärdatei behandelt wird.
Ein JPEG-Bild beginnt mit ff d8 ff e0 xx xx 4a 46 49 46 00
Sie können sehen, dass die ersten vier Bytes jeweils durch EF BF BD ersetzt wurden.
Ihre Bilder sind also tatsächlich beschädigt. Dies ist kein Problem mit dem Importer, sondern ein Problem mit der Datenbank, wie @pfaffman bereits sagte. Wenn Sie diese Datenbank von einem anderen Server kopiert haben, sollten Sie prüfen, ob dies bereits ein Problem in der Originaldatenbank ist. Dies könnte auch nur bei den ältesten Bildern auftreten (wenn dies vor langer Zeit passiert ist). Entfernen Sie einfach das exitZeile und sehen Sie, was passiert.
@RGJ Danke für die Hilfe. Ich habe versucht, eine neue Datenbank mit den richtigen Bildern zu importieren, und obwohl sie importiert wurde, wurden nicht alle Anhänge vollständig importiert. Ich stoße auf Fehler wie diesen:
Ich glaube nicht, dass der Importeur damit umgehen kann.
Wenn ich mich richtig erinnere, werden alle [ATTACH]-Tags aus den Beiträgen entfernt, da sie überflüssig sind. Das funktioniert hier wahrscheinlich nicht, weil er keine JSON-Daten darin erwartet. Es wäre eine Frage, die Stelle zu finden, an der sie entfernt werden, und diesen Code zu ändern, um die JSON-Daten innerhalb des Tags zu berücksichtigen.
Bevor ich Anhänge importiere, stelle ich fest, dass Beiträge mit Bildern [ATTACH]-Tags enthalten. Nach dem Import werden einige dieser Tags korrekt ausgefüllt, während andere leer bleiben. Woran liegt das?
Wie ich sagte, sind diese Tags überflüssig, aber die Logik zum Entfernen von Tags erwartet diesen JSON-Code nicht, daher entfernt sie sie nicht korrekt.
Ich glaube, einige vBulletin hängen sie an, indem sie sie zur Datenbank hinzufügen, und einige enthalten BBCode wie diesen. Ich glaube, ich habe den Import so modifiziert, dass er diese zuvor verarbeiten kann.
Oh, ich habe das JSON vorher nicht bemerkt. Erwarten Sie, dass diese JSON-Dateien als Anhänge in die Beiträge eingebettet werden? Wie sehen diese Beiträge in vBulletin aus?
Ich glaube, die anderen Fehler sind darauf zurückzuführen, dass diese Beiträge aus irgendeinem Grund nicht importiert wurden (z. B. weil das übergeordnete Thema gelöscht wurde oder anderweitig nicht importiert wurde).
Ich glaube nicht, dass dies JSON-Dateien sind, es sind JSON-Metadaten.
Es sieht so aus, als hätte vBulletin die Kodierung von Anhangsorten von
[attach]123[/attach]
zu
[attach=json]{"data-attachmentid":123}[/attach]
geändert und der Importeur kann damit nicht umgehen. Es sollte die Anhänge trotzdem anhängen, diese Tags dienen nur zur Positionierung innerhalb des Beitrags. Aber die Löschung des Tags erfolgt nur, wenn sie eine numerische ID enthalten.
Viele andere Fehler im obigen Screenshot sind unabhängig von diesem Problem.
Ich dachte, ich hätte gesehen, dass die Datenbank sie manchmal mit dem Beitrag verknüpft und manchmal der BBCode, und ich schätze, manchmal beides? Und manchmal befinden sie sich in der Datenbank und manchmal sind es externe Dateien (aber da erinnere ich mich vielleicht an ein anderes System).