Einen langen Beitrag wiederherstellen, der gelöscht wurde

Auf unseren Foren gab es ein langes Thema mit über 300 Beiträgen zu einem kommerziellen Webentwicklungsprojekt. Aus irgendeinem Grund verschwand dieses gesamte Thema vor einigen Tagen, nachdem wir einige Beiträge in ein anderes Thema verschoben hatten.

Ich habe das Benutzeraktivitätsprotokoll geprüft, und der Eintrag enthielt keine Einträge dafür, dass dieses nun „fehlende" Thema gelöscht oder bearbeitet wurde. Die einzige Aktion war, dass einige Beiträge (etwa 10) in ein neues Thema verschoben wurden.

Heute habe ich die Discourse-Datenbank überprüft und festgestellt, dass alle 306 Beiträge vorhanden waren. Als ich jedoch die topic_id in diesen 306 Beiträgen prüfte, war das Thema mit dieser ID leer: [].

Nehmen wir an, der fehlende Themen-Eintrag hatte die topic_id „300000" in den Beitragsdatensätzen.

Als ich dies in der Konsole ausprobierte, waren die Ergebnisse wie folgt:

> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306

Ich habe alle 306 Beiträge wiederhergestellt, indem ich ein neues Thema erstellt habe: Zuerst habe ich ein „Dummy"-Thema (Platzhalter) in der Discourse-Oberfläche erstellt und anschließend alle topic_ids der „verwaisten" Beiträge auf die neue Platzhalter-topic_id geändert, wie folgt:

Angenommen, das neu erstellte Thema (das Dummy-Thema) hat die ID 304000, dann:

Post.where(topic_id: 300000).update_all(topic_id: 304000)

Dies funktionierte und stellte alle 306 Beiträge im neuen Platzhalter-/Dummy-Thema wieder her.

Anschließend habe ich einfach den Titel des neuen Themas bearbeitet, und alles sieht gut aus. Da wir keine Links zu diesem langen, privaten Thema hatten, bestand keine Sorge, dass Links durch eine neue Themen-ID brechen würden, also ist alles in Ordnung.

Ich habe keine Ahnung, warum der Themen-Eintrag leer war und alle Beiträge mit dieser Themen-ID intakt blieben. Die Datensätze und Protokolle zeigen keine Aktion (Löschen, Bearbeiten) an diesem Thema an. Die einzige Aktion an diesem Thema war das Verschieben einiger weniger Beiträge in ein neues Thema, was den Themen-Eintrag jedoch nicht „auf Null" setzen sollte.

Da ich dies nicht wiederholen kann (und nicht sicher bin, was passiert ist), habe ich dies nicht als „Fehler" gemeldet, sondern stattdessen gewartet, bis ich heute Zeit hatte, etwas Recherche zu betreiben. Dabei stellte ich fest, dass die 306 Beiträge ihr übergeordnetes Thema „jemand" verloren hatten; aber diese Technik hat sie alle wiederhergestellt.

Wenn ich die ursprüngliche Themen-ID hätte bewahren wollen, hätte ich versucht, den ursprünglichen Themen-Eintrag wiederherzustellen, aber das scheint etwas mehr Arbeit zu sein. Daher habe ich einfach die 306 „themenlosen" Beiträge einem neuen Thema zugewiesen, und das Ergebnis war, wie erwartet:

> Post.where(topic_id:304000).count
> 307

Ich hoffe, das hilft jemandem, der in Zukunft auf eine ähnliche Situation stoßen könnte.

2 „Gefällt mir“