Bilder bei Backup/Restore verloren, Domainwechsel, keine neuen Uploads möglich

Meine Gruppe hat zwei Monate lang Discourse auf einer temporären Domain betrieben, bis wir uns auf unsere eigentliche Domain einigen konnten. Gestern habe ich versucht, alle Inhalte von der alten auf die neue Domain zu migrieren. Alle Textinhalte, Benutzerkonten und sogar interthread-Links wurden korrekt übertragen. Doch jetzt:

  • Alle früheren Bild-Einbettungen scheinen verloren gegangen zu sein.
  • Es können keine neuen Bilder hochgeladen werden.

So ist mein Vorgehen gewesen:

  • Ich habe eine neue Discourse-Instanz auf einem neuen DigitalOcean-Droplet erstellt.
  • Ich habe die neue Domain mit diesem neuen Droplet verbunden.
  • Ich habe bestätigt, dass sowohl die Discourse-Instanzen als auch alle Plugins auf dem neuesten Stand der verfügbaren Softwareversionen waren.
  • Ich habe die alte Discourse-Instanz in den Nur-Lese-Modus versetzt, um das Hinzufügen neuer Inhalte zu verhindern.
  • Ich habe ein Backup der alten Discourse-Instanz erstellt.
  • Ich habe das Backup auf die neue Discourse-Instanz hochgeladen.
  • Ich habe die E-Mail-Adresse von Discourse von der E-Mail der alten Domain auf die der neuen Domain geändert.
  • Ich habe einen Test der Benachrichtigungen durchgeführt, der für die neue Discourse-Instanz funktioniert hat.
  • Ich habe alle Discourse-Einstellungen durchgegangen, um alle Erwähnungen der alten Domain durch die neue Domain zu ersetzen.
  • Ich habe das alte Subdomain so umgeleitet, dass es auf die richtige Domain weiterleitet, und dort vorübergehend eine Notiz mit einem Link zur neuen Discourse-Instanz hinzugefügt.

Wie oben beschrieben, wurden die meisten Inhalte fehlerfrei übertragen. Doch einen Tag später haben wir festgestellt, dass die alten Bild-Einbettungen verloren gegangen sind und keine neuen Bilder hochgeladen werden können. Es wird nur der „alt“-Inhalt angezeigt. Ein Screenshot eines Beispiels folgt.

Bei der Google-Suche scheint es mehrere ausführliche Threads zu diesem Thema zu geben, aber ich habe keinen gefunden, der eine Domainänderung und die Unfähigkeit, neue Bilder hochzuladen, behandelt.

Ich habe gerade versucht, das Problem wie folgt zu lösen:

  • SSH-Verbindung zur Maschine herstellen.
  • In das Discourse-Verzeichnis wechseln und die App starten.
  • rake posts:missing_uploads ausführen. Das ergibt:
Looking for missing uploads on: default

0 post uploads are missing.
  • rake uploads:missing ausführen. Das ergibt eine lange Liste:
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
  • rake uploads:recover_from_tombstone ausführen. Das gibt keine Ausgabe.

Ich gebe zu, dass ich nicht genau weiß, was diese Rake-Befehle tun.

Ich kann auch in der Datei containers/app.yml sehen, dass DISCOURSE_HOSTNAME die korrekte (neue) Subdomain und Domain ist.

Das Ausführen von ./launcher rebuild app scheint nichts zu ändern.

Kann mir bitte jemand helfen? Vielen Dank.

Hast du bereits einen Neuaufbau versucht?

cd /var/discourse
./launcher enter app
rake posts:rebake

Danke für den Hinweis. Ich habe deine Befehle gerade eingegeben, aber ich sehe keinen Unterschied. Alte Bilder werden immer noch nicht angezeigt. Neue Bilder können immer noch nicht hochgeladen werden. Übrigens wirft die Konsole des Web-Browsers nach Abschluss des Hochladeversuchs einen “GET 404”-Fehler aus.

Update:

Ich weiß nicht genau, welcher Befehl die Situation verbessert hat, aber sie hat sich verbessert, ist jedoch noch nicht vollständig gelöst.

  • Ich kann neue Dateien der Typen TXT, DOCX, XLSX, JPG und PNG erstellen und hochladen.
  • Die meisten (aber nicht alle) alten Uploads aller Typen werden jetzt korrekt angezeigt und können heruntergeladen werden.

Die problematischen Uploads wurden zuvor ohne Fehler angezeigt und heruntergeladen. Nach einem erneuten Hochladen in neuen Testbeiträgen verweigern sie jedoch die Anzeige. Als Beispiel:

Dieses Bild: https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

Wird in meinem Discourse korrekt angezeigt, wenn die URL in einer eigenen Zeile eingegeben wird, wie hier unten:

Verschwindet jedoch nach Abschluss des Beitrags und Neuladen der Seite aus dem Beitrag, wobei nur eine einzelne leere Zeile übrig bleibt. Eine Inspektion des Quellcodes zeigt ein Bild-Element mit einem SRC-Attribut, das auf einen Pfad auf meiner Domain verweist, der wie folgt strukturiert ist: https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. Wird dieser Pfad in einem neuen Tab geöffnet, wird eine NGINX-404-Seite geladen.

Wenn ich das Bild von der ursprünglichen Quelle auf meinen Laptop herunterlade und es in mein Discourse hochlade (wie ich es hier im folgenden Discourse tun werde), schlägt der Upload in meinem Discourse fehl.

In meinem Discourse sieht es so aus:

Wenn ich auf dieses fehlgeschlagene Bild mit Strg geklickt und “Bild in neuem Tab öffnen” auswähle, wird erneut eine NGINX-404-Seite geladen.

Ich sehe im aktuellen Dialogfeld, dass Discourse die Bildendung von JPG in JPEG ändert, aber ich glaube nicht, dass dies relevant ist.

Wenn ich das heruntergeladene Bild in der Affinity Photo-App öffne, ohne Komprimierung als neues JPG exportiere und es erneut in mein Discourse hochlade, wird es in meinem Discourse korrekt angezeigt.

Dies deutet für mich darauf hin, dass das Problem weiterhin bei meinem Discourse liegt und nicht bei den hochgeladenen Dateien.

Ich bin bei einer kürzlich durchgeführten Übertragung auf dieses Problem gestoßen.

Der einfachste nicht-technische Weg, dies zu lösen, bestand darin, sich mit FileZilla auf Ihrer ursprünglichen Website/Host anzumelden und zu

VAR/Discourse/Uploads

zu navigieren. Dort finden Sie Unterordner mit Bildern. Ich habe sie einfach vom ursprünglichen Host heruntergeladen und auf den neuen hochgeladen.

Eine schnellere Alternative ist die Verwendung dieser Methode zur Sicherung. Es ist ein manueller Prozess, hat aber ebenfalls gut funktioniert.

Danke für die Antwort. Ich habe die FileZilla-App noch nie verwendet. Ich benutze die Transmit-App für FTP. Aber ich weiß nicht, wie ich eine Verbindung zu meiner Discourse-App auf meinem DigitalOcean-Droplet über FTP herstelle.

Ich kann mich per SSH mit meinem Droplet verbinden und zu /var/discourse/ navigieren, aber dort gibt es kein uploads-Verzeichnis.

Selbst wenn ich Bilddateien manuell vom alten Ort an den neuen Ort verschieben würde, wie würde das das Problem beheben, dass dieselben Bilder nicht erneut hochgeladen werden können?

Mein sehr grundlegendes Verständnis von Discourse (und ich bin hier wirklich ein Anfänger) ist, dass hochgeladene Bilder auf deiner Seite gespeichert werden und zusätzlich eine optimierte Version der Bildgröße. Anfangs wird das Originalbild den Benutzern angezeigt, und zu einem bestimmten Zeitpunkt wechselt das Forum zur optimierten Version (mir schien das nach 24 Stunden der Fall zu sein).

Ich habe ein wenig mit den Einstellungen experimentiert, da ich besorgt war, den Speicherplatz zu überschreiten.

Auf deinem Admin-Dashboard findest du sie (im Abschnitt „Dateien“). Es gibt verschiedene Einstellungen, um die Bildgröße und -abmessungen zu steuern. Das könnte mit deinem Problem mit den fehlerhaften Bildern zusammenhängen (falls ich es richtig verstanden habe). Beispielsweise fällt dein neu formatiertes Bild immer noch nicht in die Kriterien.

Mein Problem beim Wechsel des Hosts von Digital Ocean zu Hetzner war, dass einige Bilder (und Avatare) einfach nicht angezeigt wurden (ähnlich wie in deinem ersten Screenshot). Meine Lösung bestand darin, sie per FTP zu verschieben (einfach, aber es funktionierte). Ich bin mir nicht zu 100 % sicher, warum. Zuerst habe ich nur die optimierten Bilder verschoben, was das Problem nicht behob, aber als ich alle Bilder verschob, wurde mein Problem gelöst.

Entschuldigung wegen des Verzeichnisfehlers – ich habe es aus dem Gedächtnis gemacht. Die Verzeichnisstruktur lautet: VAR/Discours/Shared/Standalone/Upload

Es ist sehr einfach, sich mit einem FTP-Client bei Digital Ocean anzumelden:

Host: IP-Adresse von Discourse
Port: 22
Benutzername: root
Passwort: dein SSH-Passwort

Wie gesagt, ich bin weit davon entfernt, ein Experte zu sein, sondern jemand, der in den letzten Monaten ein wenig herumprobiert hat.

Es gibt hier Leute, die bessere Ratschläge (und Einsichten) geben können. Aber wenn alles andere scheitert, könnte es sich lohnen, meinen Ansatz auszuprobieren.

Meine Lösung war, sie per FTP zu verschieben (einfach, aber es hat funktioniert). Ich bin mir nicht zu 100 % sicher, warum. Zuerst habe ich nur die optimierten Bilder verschoben, was das Problem nicht behoben hat, aber als ich alle Bilder verschob, war mein Problem gelöst.

Danke für die detaillierteren Anweisungen, wie man sich per FTP auf meine beiden Discourse-Instanzen verbindet. Die Datei uploads war auf dem alten Discourse etwa 125 MB groß, auf dem neuen 60 MB. Also habe ich die alte Datei auf den Desktop meines Laptops kopiert. Dann habe ich ihren Inhalt, ordnerweise, auf den neuen Discourse übertragen und dabei Duplikate übersprungen.

Und zu meiner Überraschung scheint das Problem damit gelöst zu sein. Alle Bild-Uploads funktionieren wieder, sowohl in Threads, die vor meiner Discourse-Migration erstellt wurden, als auch in Threads, die ich heute zur Fehlerbehebung angelegt habe.

Ich vermute, dass Discourse bereits vorhandene Verweise auf Inhalte wiederverwendet hat, die beim Verschieben irgendwie verloren gegangen sind. Wenn ich also exakt dieselbe Bilddatei erneut hochlud, wurde ein defekter Verweis wiederverwendet, was zu wiederholten Fehlern führte. Als ich sie jedoch als neue Datei neu speicherte, funktionierte es, weil eine neue Kopie mit einem neuen Verweis gespeichert wurde. Vielleicht.

Nochmals vielen Dank.

Standardmäßig enthalten Sicherungen keine optimierten Bilder, da diese neu erstellt werden können. Ihre Aufnahme würde Bandbreite und Festplattenspeicher verschwenden.

In Ihrem Fall hätte es geholfen, diese einzubeziehen, indem Sie die Site-Einstellung include_thumbnails_in_backups vor der Erstellung der Sicherung aktiviert hätten.

Als Alternative hätte es auch funktioniert, nach der Wiederherstellung rake posts:rebake_uncooked_posts auszuführen. Andernfalls werden die optimierten Bilder von einem Hintergrundjob neu generiert, was jedoch einige Zeit in Anspruch nimmt … Am Ende der Wiederherstellung finden Sie eine Logmeldung, die dies genau bestätigt.