Urgent, échec de la build mise à niveau UniqueViolation

J’ai essayé de mettre à niveau Discourse et j’ai obtenu le message suivant -

I, [2021-01-21T18:39:25.045454 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2021-01-21 18:39:32.724 UTC [4051] discourse@discourse LOG:  duration: 336.116 ms  statement: UPDATE users
SET locale = 'en_GB'
WHERE locale = 'en'

2021-01-21 18:39:33.373 UTC [4051] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_users_on_username_lower"
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse DETAIL:  Key (username_lower)=(xyz123) already exists.
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse STATEMENT:  UPDATE users
SET locale = 'en'
WHERE locale = 'en_US'

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

J’ai essayé d’exécuter ./launcher enter app et su postgres -c 'psql discourse', mais j’ai obtenu l’erreur suivante -

psql: error: could not connect to server: 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”?

Avez-vous une idée @merefield ? Merci !

Bonjour.

Lorsqu’une mise à niveau échoue, le conteneur reste arrêté. (Essayez de vous connecter à votre site via un navigateur, et vous verrez que c’est bien le cas.)

Il se peut donc que vous n’ayez tout simplement pas démarré le dernier conteneur fonctionnel. (Avant la mise à niveau)

Faites-le avec ./launcher start app, puis accédez au conteneur et essayez de vous connecter à l’interface de ligne de commande de la base de données.

Merci, j’ai redémarré le conteneur, avez-vous une idée ? J’ai essayé ./launcher enter app, y a-t-il autre chose que je puisse essayer ?

ubuntu@:/var/discourse$ ./launcher start app
AVERTISSEMENT : La version de Docker 17.05.0-ce est obsolète …
Rien à faire, votre conteneur est déjà démarré !

Avez-vous rencontré une erreur lors de la saisie du conteneur ?

Aucune erreur, mais lorsque j’ai exécuté ./launcher logs app, j’ai obtenu le résultat suivant :

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normalement en marche, souhaité en marche
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normalement en marche, souhaité en marche
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
pid du superviseur : 1847 pid d’unicorn : 1857
config/unicorn_launcher: ligne 71 : kill: (1857) - Aucun processus correspondant
config/unicorn_launcher: ligne 15 : kill: (1857) - Aucun processus correspondant
(1847) sortie
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normalement en marche, souhaité en marche
ok: run: redis: (pid 47) 945s

Quel est le résultat de ps -ef | grep postgres ?

root 38 35 0 19:09 ? 00:00:00 runsv postgres
root 46 38 0 19:09 ? 00:00:00 svlogd /var/log/postgres
root 2573 2571 0 19:31 ? 00:00:00 sv start postgres
root 2575 2497 0 19:31 ? 00:00:00 grep postgres

Dois-je l’exécuter à l’intérieur du conteneur ou directement sur la machine Linux ?

À l’intérieur. On dirait que ce n’est pas en cours d’exécution.

Vous devrez probablement le redémarrer manuellement, en tant qu’utilisateur postgres.

Connaissez-vous la commande rapide pour le redémarrer ?

Vous pourriez essayer :

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main - en remplaçant 13 par votre version actuelle.

C’est la commande annoncée lors du processus d’une installation saine.

Aucune garantie avec cela, car je ne l’ai pas testée !

Non, ne vous embêtez pas à faire cela, voyez plus bas.

Merci. J’ai la version 12, mais j’ai obtenu l’erreur suivante :

su : option invalide – ‘D’
Essayez ‘su --help’ pour plus d’informations.

-D est un interrupteur valide.

Assurez-vous de ne pas avoir inclus le trait d’union en dehors de l’extrait de code ?

Au fait, je me demande si votre processus de mise à niveau vers la version 13 a échoué.

Si c’est le cas, vous pourriez jeter un coup d’œil à ce sujet et éventuellement y poster : PostgreSQL 13 update

Ouais, je suis toujours sur la version 12…

Désolé, il semble que cela soit géré et encapsulé par un processus de niveau supérieur.

Si je tue le mien, il redémarre automatiquement.

Essayez : sv start postgres

en tant que root

Voulez-vous dire l’exécuter dans un conteneur Docker ? Merci.

Oui, c’est là que le service s’exécute.

Mieux encore, faites ceci : sv restart postgres

Ensuite, vérifiez :

tail /var/log/postgres/current

Une situation saine ressemblera à ceci :

2021-01-21 20:21:10.284 UTC [575368] LOG: le système de base de données est prêt à accepter les connexions quelque part dans les logs.

Voici le journal des erreurs -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: les fichiers de base de données sont incompatibles avec le serveur
2021-01-21 18:12:04.965 UTC [623] DETAIL: Le répertoire de données a été initialisé par la version 13 de PostgreSQL, qui n’est pas compatible avec cette version 12.3 (Debian 12.3-1.pgdg100+1).
pg_ctl: impossible de démarrer le serveur
Examinez la sortie du journal.