Unsere Discourse-Installation, eine Standardinstallation basierend auf dem offiziellen Repository, die jedoch nur die SSO-Integration als Anmeldesystem verwendet, läuft seit mehreren Jahren und bedient eine große Benutzerbasis. Sie läuft auf einem dedizierten Server unter Ubuntu, auf dem auch andere Anwendungen laufen, und das bisher ohne nennenswerte Probleme, wie ich erfreut feststellen kann.
Leider kam es kürzlich zu einem spontanen Ausfall, und die Installation scheint überhaupt nicht mehr zu funktionieren.
Erste Berichte besagten, dass die Seite viele scheinbar zufällige 500er-Fehler aufwies und Benachrichtigungen nicht zugestellt wurden, aber ansonsten funktionierte sie noch. Der Kontext war, dass die Installation vor ein oder zwei Monaten zuletzt aktualisiert wurde und keine Änderungen an ihr oder der Serverumgebung vorgenommen worden waren, so dass dies eine überraschende Entwicklung war.
Wir bestätigten, dass 500er-Fehler auftraten, und versuchten zunächst, den Server und den Container neu zu starten, was jedoch ohne Erfolg blieb. Ein „apt-get update“ wurde ausgeführt, um alle Pakete auf den neuesten Stand zu bringen. Wir versuchten auch, Discourse über das Backend zu aktualisieren, aber während des Einloggens mit dem Admin-Link wurden keine Login-Links per E-Mail versendet, und nach dem Neustart des Containers generierte die Admin-Login-Seite nur einen 500er-Fehler.
Ich überprüfte auch die Serverumgebung auf Auffälligkeiten bei Hardware, Betriebssystem oder Sonstigem, und nichts schien fehlerhaft zu sein.
Als Nächstes versuchten wir einen vollständigen Rebuild und ein „git pull“-Update über die Kommandozeile. Dies schlug während der Datenbankmigrationen des Upgrades mit folgendem Fehler fehl:
I, [2022-08-09T23:15:21.229857 #1] INFO -- : > cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1] INFO -- : docker_manager is already at latest compatible version
I, [2022-08-09T23:15:23.939220 #1] INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT: UPDATE bookmarks
SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
Wenn es eine Datenbankinkonsistenz gibt, habe ich keine Ahnung, wie sie entstanden ist… Ich kann den Rest des Konsolenverlaufs bei Bedarf bereitstellen.
Die Ausführung von „./discourse-doctor“ verlief ohne offensichtliche Probleme, abgesehen von einer Warnung bezüglich der Mailserverkonfiguration – „certificate verify failed (self signed certificate)“ –, was erklären könnte, warum die E-Mails nicht versendet wurden. Zuvor wurden sie mit der bestehenden Konfiguration versendet, und der Mailserver scheint ansonsten ohne Probleme zu funktionieren, daher bin ich mir hier nicht sicher.
Derzeit ist die Seite komplett ausgefallen (liefert nach dem fehlgeschlagenen Update nur noch 500er-Fehler). Wir haben keine Ahnung, wie wir weiter vorgehen sollen, abgesehen davon, externe Unterstützung zu suchen. Jede Hilfe wäre sehr willkommen!