Kann Kategoriebeschreibungsbeiträge von gelöschtem Benutzer nicht wiederherstellen

Irgendwann nach der Erstellung einiger Kategorien wurde der Benutzer, der sie erstellt hatte, gelöscht. Wenn ich mir das Protokoll ansehe, kann ich erkennen, dass Discourse diese Beiträge automatisch zur gleichen Zeit gelöscht hat, als der Benutzer gelöscht wurde.

Wir haben nicht bemerkt, dass dies Probleme verursachte, bis einige Zeit später klar wurde, dass zwar Administratoren die betroffenen Kategorie-Beschreibungsbeiträge weiterhin sehen (und bearbeiten) können, aber normale Benutzer, wenn sie diese Beiträge anzeigen möchten, stattdessen folgende Meldung erhalten: „Fehler; beim Laden; Etwas ist schiefgelaufen.

3 „Gefällt mir“

Hat also jemand einen Löschbefehl für den Benutzer ausgegeben, der die Kategorien erstellt hat? Gibt es einen besonderen Grund, warum dieser Benutzer gelöscht und nicht anonymisiert wurde?

Es stimmt, dass das Themen-Topic für die Kategorienbeschreibung vom Benutzer erstellt wird, der die Kategorie erstellt. Das Löschen dieses Benutzers (und aller seiner Beiträge) könnte dies potenziell verursachen. @tshenry, können wir dieses Szenario nächste Woche testen?

3 „Gefällt mir“

Ich konnte es gerade schnell durchgehen und die gleichen Ergebnisse reproduzieren.

  1. Erstellen Sie eine Kategorie mit einem Admin-Benutzer
  2. Entziehen Sie ihm den Admin-Status und löschen Sie den Benutzer
  3. Das „Über“-Thema der Kategorie wird beim Löschen des Benutzers weich gelöscht
  4. Der Versuch, das Thema wiederherzustellen/zu löschen, funktioniert nicht
  5. Der Wechsel des Eigentümers funktioniert technisch gesehen, aber das Thema bleibt in einem seltsamen gelöschten Zustand, egal was Sie über die Benutzeroberfläche tun.

In der Konsole sieht es so aus, als ob der posts-Datensatz, der mit dem Thema verknüpft ist, beim Löschen des Benutzers ebenfalls gelöscht wird. Der Themen-Datensatz enthält viele Nullen, wenn man sich verschiedene post-bezogene Attribute ansieht.

Es könnte sich lohnen, dass ein Ingenieur prüft, ob wir hier etwas eleganter vorgehen können, aber ich vermute, dass das leichter gesagt als getan ist.


Ich habe einen Workaround gefunden, um wieder in einen guten Zustand zu kommen, musste dafür jedoch die Kommandozeile verwenden. @jrivettcsa Ich empfehle Ihnen, vor dem Versuch ein Backup zu erstellen:

Benötigte Werte

Kopieren Sie unbedingt den Inhalt des „Über“-Themas, den Sie später verwenden möchten, in einen Texteditor oder ähnliches, und fahren Sie dann mit dem Folgenden fort:

Öffnen Sie die Rails-Konsole:

cd /var/discourse
./launcher enter app
rails c

Ersetzen Sie <ABOUT_TOPIC_ID> im folgenden Befehl durch die ID des „Über“-Themas der Kategorie und führen Sie ihn aus, um das defekte Thema hart zu löschen:

Topic.where(id: <ABOUT_TOPIC_ID>).destroy_all

Drücken Sie die Taste q, um bei Bedarf wieder zur Konsole zurückzukehren.

Die Kategorie ist immer noch mit dem defekten Thema verknüpft, daher müssen wir diese Zuordnung auflösen. Ersetzen Sie <CATEGORY_ID> im folgenden Befehl durch die ID der Kategorie und führen Sie ihn aus:

Category.where(id: <CATEGORY_ID>).update_all(topic_id: nil)

Drücken Sie die Taste q, um bei Bedarf wieder zur Konsole zurückzukehren.

Beenden Sie die Rails-Konsole und führen Sie den folgenden Rake-Auftrag aus, um ein neues „Über“-Thema für die Kategorie zu erstellen:

exit
rake categories:create_definition

Jetzt sollte die Kategorie repariert sein! Sie können diesen Vorgang bei Bedarf so oft wiederholen, wie nötig.

6 „Gefällt mir“

Ja, einige bedauerliche Änderungen wurden von jemandem vorgenommen, der es besser hätte wissen müssen. Ich kann dazu nichts weiter sagen. Glücklicherweise werden diese Vorgänge von Discourse protokolliert.

1 „Gefällt mir“

Vielen Dank für die Bestätigung des Problems und die Bereitstellung einer Lösung. Ich werde es versuchen und die Ergebnisse hier posten.

1 „Gefällt mir“

Diese Lösung hat perfekt funktioniert. Danke!

Ich habe jede einzelne manuell behoben, aber ich glaube, ich hätte die destroy_all- und update_all-Operationen in einer einzigen Rails-Konsole-Sitzung erledigen und den Befehl rake categories:create_definition am Ende einmal ausführen können. Was meinst du? Das könnte jemandem irgendwann ein paar Minuten sparen.

4 „Gefällt mir“

Das ist definitiv ein Fehler, @jrivettcsa – wenn das Löschen eines Benutzers zu einer defekten Website führt, ist das schlecht! Wir werden das beheben.

4 „Gefällt mir“

Vielen Dank, dass Sie dieses Problem gemeldet haben. Ich habe in diesem PR eine Korrektur vorgenommen:

Wenn ein Benutzer gelöscht wird, wird der Beitrag, der eine Kategorie beschreibt, nicht mehr gelöscht. Stattdessen wird der Autor des Beitrags vom ursprünglichen Benutzer auf den Systembenutzer geändert.

4 „Gefällt mir“