Erholung von fehlgeschlagenem/teilweise angewendetem Upgrade

Ich habe versucht, meine Discourse-Instanz zu aktualisieren, aber aufgrund einiger Probleme scheint dies in einem teilweise angewendeten Zustand fehlgeschlagen zu sein. Wenn ich ./launcher rebuild app ausführe, erhalte ich die folgende Fehlermeldung, die mir eine bereits (teilweise) angewendete Migration anzeigt:

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : 	> cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Jeder Hinweis, ob es einen Weg gibt, dies zu beheben (oder ob ich den sauren Apfel beißen und eine Neuinstallation durchführen muss), wäre willkommen. Danke!

1 „Gefällt mir“

Sie können einen

./launcher start app

ausführen, um den alten Container zu starten. Damit sind Sie wieder einsatzbereit.

2 „Gefällt mir“

Ja, das ist mir bewusst (und ich habe es auch getan) – ich frage mich jedoch, was mein nächster Schritt in Bezug auf das Upgrade sein sollte.

2 „Gefällt mir“

Oh. Das war dann nicht hilfreich :person_shrugging:

Ich hatte ein ähnliches Problem, aber es scheint unwahrscheinlich, dass meine Lösung Ihnen helfen wird.

Sie haben SKIP_POST_DEPLOYMENT_MIGRATIONS nicht in Ihrer app.yml gesetzt, oder? Wenn ja, müssen Sie die Datenbank mit dieser Einstellung auf Null migrieren und dann neu erstellen, aber ich glaube nicht, dass das Ihr Problem ist.

Nein, sieht nicht so aus.

Das dachte ich auch. Es könnte also ein tatsächliches Problem geben, das mit der Migration von einem bestimmten Punkt zum aktuellen zusammenhängt. Aber das sollte nicht passieren.

Schau dir das an:

Ich habe alle Tabellen, die Fehler verursachten (eine nach der anderen, am Ende waren es 7), geleert, bis ich die App ohne Fehler neu erstellen konnte.

In deinem Fall scheint das Problem eine Spalte zu sein:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

Vielleicht solltest du nachsehen, zu welcher Tabelle sie gehört, um sie leeren zu können, oder du kannst diese Spalte einfach löschen.

Ich glaube, das Problem liegt darin, dass beim teilweisen Migrieren diese Tabellen bereits erstellt sind, daher können sie nicht erneut erstellt werden und es wird ein Fehler zurückgegeben. Vielleicht könnte man diesem Prozess eine Bedingung hinzufügen, damit er keine Fehler verursacht? (Ich bin kein Experte) @pfaffman

Klingt richtig, @undasein.

Ich glaube, Sie möchten die Spalte bookmarkable_id aus der Tabelle bookmarks entfernen. Nachdem Sie in den Container und dann in PostgreSQL gelangt sind, wie hier gezeigt:

cd /var/discourse
./launcher enter app
su - postgres
psql

Dann würden Sie Folgendes tun:

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Aber ein reines Datenbank-Backup wäre keine schlechte Idee, wenn das Forum läuft. Wenn nicht, können Sie ein Backup mit discourse backup nach der obigen Zeile enter app durchführen.

1 „Gefällt mir“

Gleiches Problem hier! Ist das die richtige Lösung, der ich folgen soll?

Das war meine Vermutung. Sie können es versuchen und uns Bescheid geben.

Ich bin nicht diskurskundig.

@sam, irgendwelche Ideen, wie es weitergehen soll? Eine Standardinstallation und ein Upgrade erweisen sich als Albtraum.

Ist das oben der richtige Weg, um dieses Problem zu beheben?

Vielen Dank im Voraus.

hat leider nicht funktioniert, immer noch die Meldung

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Gab es nach diesen Befehlen noch etwas zu tun?

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Vielen Dank für Ihre Hilfe

Hallo Nick,
ich versuche, dies zu reproduzieren. Welchen Commit hat deine Instanz?
Du könntest es mit Folgendem versuchen:

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

in deiner app.yml. Das ist 10 Tage her, kurz vor der Wiederherstellung eines zurückgesetzten Commits, der ähnliche Probleme zu haben schien.

2 „Gefällt mir“

Guten Morgen Ben,

Könntest du mir bitte die Befehle durchgehen, um das zu tun?

Ich kann Updates und so einfach durchführen, aber das ist das erste Mal, dass etwas schiefgelaufen ist und ehrlich gesagt, bin ich total außerhalb meiner Komfortzone, lol.

Könnten Sie ./launcher start app ausführen und die installierte Version unter https://your.domain/admin überprüfen, damit ich versuchen kann, Ihre Schritte nachzuvollziehen. Gibt es Plugins?

2 „Gefällt mir“

Hallo Ben,

Installierte Version: 2.9.0.beta2
(5374e587a3)

Installierte Plugins:
discourse-reactions
docker_manager
styleguide

Danke,
Nick

./launcher start app
-bash: ./launcher: Datei oder Verzeichnis nicht gefunden
 cd /var/discourse

Vorher

./launcher start app
2 „Gefällt mir“

Mir ist aufgefallen, dass ich ein paar Ubuntu-Updates hatte, also ist alles auf dem Server auf dem neuesten Stand

habe es erneut versucht und immer noch

PG::DuplicateColumn: ERROR:  Spalte „bookmarkable_id“ der Relation „bookmarks“ existiert bereits

Das scheint eine wahrscheinliche Lösung zu sein. Sie sollten ein Upgrade auf diese Version durchführen können und vielleicht dann zur aktuellen Version gelangen? So etwas ergibt für mich Sinn.

1 „Gefällt mir“