Ich habe ein Problem in meiner Community. Ich kann die „Alle Beiträge löschen“-Funktion für bestimmte Benutzer nicht ausführen. Soweit ich feststellen konnte, tritt dies nur bei älteren Konten mit vielen Beiträgen auf. Neuere Konten haben dieses Problem nicht.
Ich habe die Seiteneinstellungen überprüft und das Limit für „Alle Beiträge löschen“ auf 10.000 erhöht.
Ich versuche derzeit, einen Benutzer mit etwa 900 Beiträgen zu löschen. Der Benutzer möchte nicht anonymisiert werden und droht mit rechtlichen Schritten, falls das Konto und die Beiträge nicht entfernt werden. Ich klicke auf die Schaltfläche „Alle löschen“ und erhalte nach etwa einer Minute diese Meldung:
Versuche, zu Admin / Protokolle / Fehlerprotokolle zu gehen. Versuche dann erneut, die Beiträge zu löschen. Hoffentlich erscheint dort ein Protokolleintrag für den Beitrag, der das Problem verursacht.
Dies ist der Fehler, der im Protokoll erscheint, nachdem ich versuche, alle Beiträge zu löschen:
TypeError: undefined ist kein Objekt (Auswertung von 's.users')
URL: https://myserver.com/assets/ember_jquery-d430881a3fb1403871256e5a02423c4b20a78793685e92088613ca9a701baf88.js
Zeile: 9
Spalte: 8994
Fensterstandort: https://myserver.com/t/topic/64828/2502
Entschuldigung, bei genauerer Betrachtung scheint dieser Fehler mit etwas anderem zusammenzuhängen.
Ich sehe jetzt diesen hier und vermute, dass er auf ein Timeout der Anfrage zurückzuführen ist:
Ich habe eine kleine App geschrieben, die die Discourse-API meiner Installation aufruft. Sie löscht jeden Beitrag einzeln, anstatt eine Batch-Operation durchzuführen. Bei 700 Beiträgen wären das also 700 API-Aufrufe. Nicht die effizienteste Methode, aber es war hilfreich.
Ich sehe, dass es 20 problematische Beiträge gibt. Es scheint, als würde die Funktion „Alle löschen
Die fünf problematischen Beiträge liegen alle in zwei großen Themen. Wir haben beide kürzlich geschlossen, da sie einfach zu groß wurden. Das eine Thema hat 55.000 Beiträge, das andere 17.000. Ich vermute, dass beim Löschen eines Beitrags in einem so großen Thema viel Verarbeitung stattfindet, was zu einer Art Timeout führt, aber das ist nur eine Vermutung.
Ich stecke jetzt fest. Ich kann die Beiträge in diesen großen Themen nicht löschen und ich kann auch die Themen selbst nicht löschen. Beides führt zu einem 502-Gateway-Fehlerdialog.
Ja! Das funktioniert. Ich kenne mich mit Ruby oder Rails überhaupt nicht aus, aber ich kann auf diese Weise mehrere Beiträge in einem Befehl verketten:
Ich werde das wahrscheinlich irgendwann verwenden, wenn ein paar Beiträge hängen bleiben. Ist es möglich (und sicher), auf diese Weise auch ein Thema zu löschen?
Im Allgemeinen werden Beiträge in Discourse nur weich gelöscht und nicht hart gelöscht. Mit dem Befehl destroy hast du sie einfach aus der Datenbank entfernt, und ich habe dich dazu veranlasst, ihn nur zu verwenden, weil die Beiträge, die du löschen wolltest, zu unglaublich langen Themen gehörten.
Ich empfehle diese Methode nicht, weder für Beiträge noch für Themen. Sie können niemals wiederhergestellt werden, und du wirst, wie ich verstehe, an einer Datenbank für eine Produktionswebsite arbeiten, mit dem Risiko, die gesamte Website zu beschädigen, falls etwas schiefgeht. Wenn du jedoch den Befehl destroy verwenden möchtest, steht dir das frei. Du solltest immer ein Backup erstellen, wenn du vorhast, solche Befehle zu verwenden.
Um ein Thema dauerhaft zu löschen, führe folgenden Befehl aus:
Nur eine kurze Anmerkung: Um solche Leistungsprobleme zu vermeiden, haben wir zusätzliche Einstellungen eingeführt, um die Erstellung von Megathemen zu verhindern. Weitere Details finden Sie unter The MEGATOPIC: public good, or public menace?.
Vielen Dank für den Rat. Das entspricht genau meinen Erwartungen, und ich werde den Befehl destroy nur als letztes Mittel einsetzen.
Da Beiträge normalerweise nur weich gelöscht werden, scheint es, als würden dabei viele andere Vorgänge ausgeführt, anstatt nur den Datensatz zu löschen. Liegt das vielleicht daran, dass das Löschen von Beiträgen in einem Mega-Thema nicht gut funktioniert? Zu viele Aktionen, die zu einem Zeitüberschreitung führen?
Ich würde gerne eine Möglichkeit finden, dieses Problem zu lösen, ohne auf den riskanten Konsolenbefehl zurückzugreifen.
Danke. Ich habe unser maximales Thema-Limit auf 2500 geändert. Benutzer haben vor einiger Zeit darum gebeten, das Limit zu entfernen, was zu diesen Mega-Themen führte. Die Mega-Themen sind jedoch nicht gut für das Forum. Die Serverleistung wurde während der Spitzenzeiten stark beeinträchtigt, als viele Leute darauf antworteten. Wir haben es schließlich geschlossen, um dies zu verhindern, aber wir sind jetzt immer noch mit diesen massiven Themen festgefahren, die andere Probleme verursachen.
Die einfachste Lösung besteht darin, dass einige Moderatoren anfangen, Megathemen in mehrere Themen aufzuteilen (und diese dann zu schließen), zum Beispiel:
[Megathemen-Titel] Teil 1
[Megathemen-Titel] Teil 2
[Megathemen-Titel] Teil 3
[Megathemen-Titel] Teil […]
[Megathemen-Titel] Teil 10
Jeder Teil wird automatisch mit dem vorherigen und dem nächsten Teil verknüpft, sodass die Nutzer keine Schwierigkeiten bei der Navigation haben sollten. Außerdem wird damit das Leistungsproblem definitiv gelöst.
Ja, das wird eine langweilige Aufgabe sein, aber das ist auch einer der Gründe, warum ein Thema mit 55.000 oder 17.000 Beiträgen absolut nutzlos ist, da niemand sie lesen wird.