Discourse-Upgrade-Fehler "FAILED TO BOOTSTRAP"

Hallo zusammen,

mein erster Beitrag hier – vielen Dank im Voraus für die Aufnahme. Wir führen eine routinemäßige, wenn auch etwas verspätete Reihe von Upgrades auf unserem mit Discourse betriebenen Forum durch (https://forum.troygrady.com) und sind an einem Punkt angelangt, an dem das Upgrade nach den Befehlen „git pull" und „rebuild" in der Kommandozeile fehlschlägt, wie in den Anweisungen auf dem Bildschirm empfohlen.

Nachfolgend finden Sie die Ausgabe des Befehls „./launcher rebuild app". Ich habe auch das Skript „discourse doctor" ausgeführt und kann die Ausgabe gerne veröffentlichen oder einen Link dazu senden, sofern Sie dies nicht als zu großes Sicherheitsrisiko ansehen.

Ich möchte erwähnen, dass ich zwar ein kompetenter PHP-/SQL-Entwickler mit gelegentlicher Erfahrung als Administrator von Linux-Anwendungen bin, aber mit Discourse selbst überhaupt nicht vertraut bin. Außerdem habe ich die ursprüngliche Installation nicht selbst vorgenommen. Ihr Liebling, wie ich weiß!

Ich folge hier einfach den Anweisungen auf dem Bildschirm, die damit begannen, auf die blauen „Upgrade"-Buttons in der Benutzeroberfläche für Docker zu klicken. Sobald dies abgeschlossen war, sah ich die Anweisung auf dem Bildschirm, sich über die Kommandozeile einzuloggen und „git pull" sowie „launcher rebuild" auszuführen. So bin ich an diesen Punkt gelangt.

Zusätzlich möchte ich anmerken, dass unser Forum vor diesem Vorfall absolut einwandfrei lief, ohne jegliche Probleme, falls dies bei der Diagnose hilft. Der einzige Grund für dieses Upgrade ist einfach, mit den von euch veröffentlichten Updates Schritt zu halten, um nicht zu sehr veraltet zu sein. Dies ist der zentrale Konflikt meiner „Wenn es nicht kaputt ist, repariere es nicht"-Mentalität: die Angst, dass ein Upgrade einen Fehler verursachen könnte, den ich nicht beheben kann. Und tatsächlich sind wir nun hier.

Zum Zeitpunkt dieses Schreibens ist das Forum komplett offline. Da es ein Kernbestandteil unseres Geschäfts ist, wäre es mir ein großes Anliegen, es so schnell wie möglich wieder betriebsbereit zu haben.

Jeder Hinweis wird sehr geschätzt!

FEHLGESCHLAGEN

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ fehlgeschlagen mit Rückgabewert #<Process::Status: pid 3972 exit 1>
Fehlerort: /pups/lib/pups/exec_command.rb:112:in `spawn’
Ausführung fehlgeschlagen mit den Parametern {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
f89318158c2c276c69a60d600def8a838ae4ad4bc7bafbe665fb1cd77c130ad1
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen; es kann mehr als eine geben.
./discourse-doctor kann bei der Diagnose des Problems helfen.

Hey, willkommen in der Discourse-Community.

Wo installierst du, welches Betriebssystem verwendest du? Befolgst du unseren offiziellen Leitfaden?

Ich denke, du hast tatsächlich frühere Fehlermeldungen. Es sieht so aus, als wäre deine Datenbank (Server) nicht erreichbar.

Vielleicht solltest du über ein Managed Hosting nachdenken, sobald dein Forum wieder läuft…

1 „Gefällt mir“

Hallo Gavin! Danke für die schnelle Antwort. Wir nutzen einen Droplet bei Digital Ocean, und beim Einloggen sehe ich Folgendes:

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-210-generic x86_64)

Ob wir den offiziellen Leitfaden verwendet haben, kann ich nicht sagen. Dies ist eine Installation, die wir vielleicht drei bis vier Jahre ohne Probleme betrieben haben, wobei ich nicht die Person war, die sie ursprünglich eingerichtet hat. In der Regel waren nur Updates im Browser und gelegentliche Neubuilds über die Kommandozeile erforderlich, die bisher fast immer ohne weiteren Eingriff von unserer Seite funktioniert haben – bis jetzt.

Ich habe die gesamte Terminal-Ausgabe des Neubuilds in einer Datei gespeichert und kann diese durchsuchen. Da wir uns jedoch in einer virtuellen Droplet-Umgebung befinden, haben wir seit der Einrichtung nichts daran geändert. Tatsächlich melden wir uns selten ein, da Discourse mit den Updates im Browser reibungslos läuft. Daher bin ich mir nicht sicher, was sich plötzlich geändert haben könnte, sodass die Datenbank nun nicht mehr erreichbar ist.

Klar. In diesem Fall funktioniert alles seit Jahren einwandfrei, also gibt es kaum einen Anreiz, etwas zu ändern. Wir wären jedoch gerne bereit, jemanden zu beauftragen, der gelegentlich einen Blick auf unsere Installation wirft und sicherstellt, dass alles aktuell ist, anstatt dass ich das selbst mache. Gibt es eine Ressource oder ein Verzeichnis, um Discourse-Experten zu finden, die für eine solche Tätigkeit offen wären?

Vielen Dank!

Du müsstest das eigentlich updaten. Es ist alt. Sehr alt.

Aber lass uns zuerst dafür sorgen, dass du wieder läuftst. Kannst du das Fehlerprotokoll posten? Ich muss sehen, was der eigentliche Fehler ist.

Ok, nach Warnungen und Fehlern im Neuaufbau-Ausgabetext gesucht, hier ist das Ergebnis (unten).

227:initdb: Warnung: „trust"-Authentifizierung für lokale Verbindungen aktiviert
294:update-alternatives: Warnung: Erzwingt die Neuinstallation der Alternative /usr/share/postgresql/13/man/man1/psql.1.gz, da die Linkgruppe psql.1.gz defekt ist
324:update-alternatives: Warnung: Erzwingt die Neuinstallation der Alternative /usr/share/postgresql/13/man/man1/postmaster.1.gz, da die Linkgruppe postmaster.1.gz defekt ist

1684:createdb: Fehler: Datenbankerstellung fehlgeschlagen: FEHLER: Datenbank „discourse" existiert bereits
1811:I, [2021-08-29T20:18:40.246150 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
1813:I, [2021-08-29T20:18:40.253584 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
2563:StandardError: Ein Fehler ist aufgetreten, diese und alle folgenden Migrationen wurden abgebrochen:
2698:-- add_column(:groups, :imap_last_error, :text)
2961:** BOOTSTRAP FEHLGESCHLAGEN ** Bitte nach oben scrollen und nach früheren Fehlermeldungen suchen, es kann mehr als eine geben.
3118:createdb: Fehler: Datenbankerstellung fehlgeschlagen: FEHLER: Datenbank „discourse" existiert bereits
3245:I, [2021-08-29T20:22:40.262592 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
3247:I, [2021-08-29T20:22:40.274767 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
3960:StandardError: Ein Fehler ist aufgetreten, diese und alle folgenden Migrationen wurden abgebrochen:
4087:** BOOTSTRAP FEHLGESCHLAGEN ** Bitte nach oben scrollen und nach früheren Fehlermeldungen suchen, es kann mehr als eine geben.
4224:/error – nach dem Wort „error" suchen
4358:createdb: Fehler: Datenbankerstellung fehlgeschlagen: FEHLER: Datenbank „discourse" existiert bereits
4485:I, [2021-08-29T20:26:59.373901 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
4487:I, [2021-08-29T20:26:59.381142 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
5200:StandardError: Ein Fehler ist aufgetreten, diese und alle folgenden Migrationen wurden abgebrochen:
5327:** BOOTSTRAP FEHLGESCHLAGEN ** Bitte nach oben scrollen und nach früheren Fehlermeldungen suchen, es kann mehr als eine geben.

Nochmals vielen Dank, dass du dir das angesehen hast, Gavin, und Entschuldigung für die vernachlässigten OS-Updates.

Oben siehst du nur das Ergebnis meiner Suche nach den Wörtern „error" und „warning" in der Skriptausgabe; die vollständige Ausgabe habe ich hier gespeichert. Falls du noch nach anderen Dingen in dieser Ausgabe suchen solltest, lass es mich bitte wissen – ich poste sie gerne.

Ah, sorry, ich merke gerade, dass die Ausgabe eher wenig erklärend ist. Hier sind die Details zur „StandardError"-Meldung. Es sieht so aus, als sei eine INSERT-Abfrage aufgrund eines doppelten Schlüssels fehlgeschlagen. Die eigentliche Abfrage wurde der Lesbarkeit halber redigiert; ich kann sie gerne nachliefern, falls nötig.

I, [2021-08-29T20:23:37.257772 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse DETAIL: Key (id)=(-2) already exists.
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse STATEMENT: INSERT INTO
[…]
FROM plugin_store_rows
WHERE plugin_name = ‘discourse-data-explorer’ AND type_name = ‘JSON’

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
DETAIL: Key (id)=(-2) already exists.

Versuche folgendes:

1 „Gefällt mir“

Ja, das funktioniert (wie du bereits gesehen hast).

Während des Upgrades selbst ist etwas schiefgelaufen.

Poste einfach deine Anforderungen in #marketplace oder stöbere dort, um zu sehen, wer dort regelmäßig antwortet.

Alles, was du tun musst, ist, sobald Discourse wieder läuft:

  • Discourse sichern
  • das Backup herunterladen
  • den Droplet aktualisieren
  • die App neu aufbauen

Dann bist du für einige weitere Jahre gut aufgestellt.

Tolle Antwort, danke.

Wenn ich das richtig verstehe, gibt es eine von einem Plugin namens „Data Explorer" genutzte Datenbanktabelle, die einen doppelten Eintrag enthält. Das Löschen dieses doppelten Eintrags ermöglicht es dem Rebuild-Skript, fortzufahren. Aus diesem Thread geht zudem hervor, dass dieser oder ähnliche Fehler bereits früher aufgetreten sind und es möglicherweise Updates für Discourse gab, um dies in Zukunft zu verhindern. Das bedeutet, dass wir bei zukünftigen Upgrades dieses Problem möglicherweise nicht mehr treffen.

Lass mich bitte wissen, ob ich das richtig verstanden habe!

Du beziehst dich auf das Ubuntu-Upgrade? Wenn ja, verstanden.

Richtig.

Wieder richtig :slight_smile:

Ja :smiley:

Alles klar! Ich habe meine Marschbefehle. Vielen Dank für das schnelle Feedback.

1 „Gefällt mir“

Nur um das Thema abzuschließen: Für alle, die auf diesen Fehler stoßen, scheinen hier ein paar Dinge schiefgelaufen zu sein.

Beim Upgrade selbst verursachte eine doppelte Zeile im Plugin „data_explorer" ein Problem, das behoben werden musste.

Im Rahmen dessen haben wir zudem ein Betriebssystem-Upgrade von Ubuntu 16 auf 20 durchgeführt. Dies führte zu einem Netzwerkfehler, der den DigitalOcean-Droplet nach dem Neustart unerreichbar machte. Konkret scheint es so zu sein, dass beim Wechsel des Betriebssystems auf das neue „Netplan"-Setup etwas in der Konfiguration verhindert hat, dass das Boot-Skript für die Netzwerkschnittstelle zu dem Zeitpunkt abgeschlossen wurde, an dem es ausgeführt wurde. Der Droplet war also zwar gestartet, das Netzwerk jedoch nicht. Durch den Zugriff über die Recovery-Konsole im Browser und erneutes Ausführen des Skripts für die Netzwerkschnittstelle konnte die Schnittstelle wieder hochgefahren und der Droplet von außen erneut erreicht werden. Solange wir den Droplet nicht neu starten müssen, sind wir sicher, bis wir Zeit finden, ihn herunterzufahren und eine Lösung für die Netplan-Konfiguration zu testen.

Ich weiß, dass dies wahrscheinlich ein Randfall ist, aber ich erinnere mich, irgendwo gelesen zu haben, dass Betriebssystem-Upgrades generell keine Probleme verursachen. Und obwohl das in den meisten Fällen wohl auch stimmt, war es hier nicht der Fall. Wir waren dadurch etwa einen halben Tag lang offline, bis die Zeitzonen so zusammenkamen, dass unser technisches Personal uns wieder online bringen konnte.

Alles ist also vorerst gelöst. Vielen Dank an alle für die schnelle Rückmeldung.

5 „Gefällt mir“