Upgrade-Probleme: Fehlgeschlagenes Upgrade wegen doppeltem Schlüssel, fehlgeschlagene Snapshot-Wiederherstellung

Ich scheine bei der Ausführung des neuesten Upgrades auf ein Problem gestoßen zu sein, das aufgrund des Folgenden fehlschlägt:

PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_username_lower"
DETAIL:  Key (username_lower)=(scottie) already exists.

Ich habe versucht, mich zu erholen, indem ich versuchte, diesen Benutzer zu löschen, indem ich entweder auf die Rails-Konsole oder direkt auf die Postgres-Datenbank zugriff, und ich erhalte ständig einen Fehler, dass der Server nicht läuft.

Im Folgenden versuche ich, Rails nach dem Starten der App auszuführen:

FAILED

--------------------

Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 3743 exit 1>

Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'

exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}

c744729efb7a5813699e2fe8fa46ab551352d45ada8dcb9204121508364f8438

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

./discourse-doctor may help diagnose the problem.

root@kForum:/var/discourse# ./launcher start app

starting up existing container

+ /usr/bin/docker start app

app

root@kForum:/var/discourse# ./launcher enter app

root@kForum-app:/var/www/discourse# rails c

bundler: failed to load command: pry (/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/pry)

PG::ConnectionBad: could not connect to server: No such file or directory

Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Im Folgenden versuche ich, Postgres auszuführen:

root@kForum:/var/discourse# ./launcher enter app

root@kForum-app:/var/www/discourse# su discourse

discourse@kForum-app:/var/www/discourse$ psql discourse

psql: error: could not connect to server: No such file or directory

Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

discourse@kForum-app:/var/www/discourse$

Ich stelle einen früheren Snapshot in DigitalOcean wieder her, um wieder in einen funktionierenden Zustand zu gelangen, aber der seltsame (beängstigende?) Teil ist, dass selbst das Wiederherstellen des Snapshot den Standort nicht wieder in Betrieb genommen zu haben scheint. Dieser Snapshot wurde vor über 24 Stunden erstellt, als ich wusste, dass die Foren einwandfrei funktionierten, also sollte dies nichts mit dem Upgrade zu tun haben, das ich versucht habe.

In meinem wiederhergestellten Snapshot ist dies der Fehler, den ich sehe, wenn ich versuche, die App zu stoppen/starten/neu zu starten:

root@kForum:/var/discourse# ./launcher restart app

+ /usr/bin/docker stop -t 10 app

app

starting up existing container

+ /usr/bin/docker start app

Error response from daemon: container "a1023d05a7b4de25ded1aa69ad49caed9fa59d15fa8e8130d32db82934139e6b": already exists

Error: failed to start containers: app

root@kForum:/var/discourse#

Schließlich habe ich discourse-doctor ausgeführt, und dies scheint ein relevanter Teil des Fehlers zu sein?

Checking cluster versions                                   ok

The source cluster was not shut down cleanly.
Failure, exiting
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES FAILED

Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support.

You can run ./launcher start app to restart your app in the meanwhile



FAILED
--------------------
Pups::ExecError: /root/upgrade_postgres failed with return #<Process::Status: pid 46 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params "/root/upgrade_postgres"
c98d1b076faed9b0c728cd944b3f2436afc9e266910b82a644c71fd80b42f073
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
==================== END REBUILD LOG ====================
Failed to rebuild app.

Checking your domain name . . .

Connection to forum.kirupa.com succeeded.
You should probably remove any non-standard plugins and rebuild.
Attempting to restart existing container. . . 

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (78a35e0f12e5af560bd1f991ead900fefd0c81570cc4582fe99aaa5e56b238e8): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use
Error: failed to start containers: app
Failed to restart the container.


==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-sitemap.git

No non-official plugins detected.

See https://github.com/discourse/discourse/blob/master/lib/plugin/metadata.rb for the official list.

========================================
Discourse version at forum.kirupa.com: NOT FOUND
Discourse version at localhost: NOT FOUND

Gedanken dazu, was hier los ist? Mein erstes Ziel ist es, die Foren wiederherzustellen. Das Beheben der Upgrade-Fehler ist mein zweites Ziel.

Danke,
Kirupa

Sie sollten sich das hier ansehen – das scheint das gleiche Problem zu sein: Help! Upgrade led to complete fail

Ich hatte gestern einen Fall, von dem ich denke, dass er ähnlich war (siehe Help! Upgrade led to complete fail - #8 by Judith). Grob gesagt, müssen Sie etwas wie Folgendes tun:

  • postgres_data _old wieder in postgres_data umbenennen
  • den alten Container neu starten
  • das Problem mit dem beschädigten Index beheben, indem Sie doppelte Benutzer umbenennen (oder vielleicht Benutzer, die dupliziert sind, weil sie unterschiedliche Groß-/Kleinschreibung haben)
  • die Indizes auf der Benutzertabelle erstellen, um sicherzustellen, dass sie alle korrigiert sind
  • wie in PostgreSQL 13 Update beschrieben auf die PostgreSQL 12-Vorlage wechseln
  • neu erstellen, um das Upgrade durchzuführen
  • sobald das funktioniert, können Sie wieder zur Vorlage zurückkehren und das Upgrade abschließen.
  • beachten Sie, dass Sie nicht nur den Benutzernamen, sondern auch username_lower aktualisieren müssen

Der Fall, den ich gestern behoben habe, hatte einen doppelten Benutzernamen aus Februar 2020, daher möchten Sie dies wahrscheinlich nicht durch Wiederherstellen einer älteren Datenbank beheben.

Um es zu beheben, müssen Sie verstehen, wie man Datensätze über die PostgreSQL-Befehlszeile ändert, Datenbanken neu erstellt und sich mit komplexen, aber gut dokumentierten Problemen beim PostgreSQL 13-Upgrade auseinandersetzt.

Wenn Sie ein Budget von 500 $ haben, können Sie mich kontaktieren. Meine Kontaktdaten finden Sie in meinem Profil.

@pfaffman – ich habe dich gerade über dein Kontaktformular kontaktiert :slight_smile:

Ich habe geantwortet. Falls du es nicht erhalten hast, hast du vielleicht die falsche Adresse angegeben?

1 „Gefällt mir“

Um den Kreis hier zu schließen: @pfaffman ist ein Zauberer. Er hat das Problem mit dem Forum-Upgrade (und eine Vielzahl verwandter Probleme) sehr schnell gelöst :slight_smile:

3 „Gefällt mir“

Ich habe dasselbe Problem, werde aber keine 500 US-Dollar für eine Lösung bezahlen. Ich habe SFTP-Zugriff auf den Server. Wäre es nicht möglich, die Datenbank in einem Texteditor zu öffnen und den widersprüchlichen Benutzernamen umzubenennen?

Oder wenn jemand es für etwa 50 US-Dollar beheben kann, kontaktieren Sie mich bitte.

Sie können sich PG::UniqueViolation Problem during 3.1.0.beta4 upgrade - #3 by ahmedeldeep ansehen, wo jemand ziemlich gut beschrieben hat, was er getan hat.

Sie benötigen einen SSH-Client, keinen SFTP. Wenn Sie Digital Ocean verwenden, können Sie die Konsole auf deren Website nutzen.