Urgente, build aggiornata fallita UniqueViolation

Ho provato ad aggiornare Discourse e ho ottenuto il seguente messaggio:

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:

Ho provato a eseguire ./launcher enter app e su postgres -c 'psql discourse', ottenendo il seguente errore:

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”?

Hai qualche idea @merefield? Grazie!

Ehi.

Quando un aggiornamento fallisce, il container viene lasciato in stato di arresto. (Prova a collegarti al tuo sito tramite browser e vedrai che è cosÏ)

Quindi potrebbe semplicemente essere che non hai avviato l’ultimo container funzionante. (Pre-aggiornamento)

Esegui ./launcher start app, quindi entra nel container e prova ad accedere alla CLI del database.

Grazie, ho riavviato il contenitore, hai qualche idea? Ho provato ./launcher enter app, c’è altro che posso provare?

ubuntu@:/var/discourse$ ./launcher start app
WARNING: Docker versione 17.05.0-ce deprecata …
Niente da fare, il tuo contenitore è già stato avviato!

Hai ricevuto un errore durante l’accesso al container?

Nessun errore, ma quando ho eseguito ./launcher logs app ho ottenuto quanto segue -

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normalmente attivo, desiderato attivo
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normalmente attivo, desiderato attivo
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
pid del supervisor: 1847 pid di unicorn: 1857
config/unicorn_launcher: riga 71: kill: (1857) - Nessun processo trovato
config/unicorn_launcher: riga 15: kill: (1857) - Nessun processo trovato
(1847) in uscita
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normalmente attivo, desiderato attivo
ok: run: redis: (pid 47) 945s

Qual è il risultato di 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

Dovrei eseguirlo all’interno del container o direttamente sulla macchina Linux?

All’interno. Sembra che non sia in esecuzione.

Probabilmente dovrai riavviarlo manualmente, come utente postgres.

Conosci il comando rapido per riavviarlo?

Potresti provare:

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main - sostituendo il 13 con la tua versione corrente.

Che è il comando pubblicizzato nel processo di un’installazione funzionante.

Tuttavia, senza garanzia, poiché non l’ho testato!

No, non preoccuparti di farlo, vedi piĂš sotto.

Grazie. Ho la versione 12, ma ho ricevuto il seguente errore -

su: opzione non valida – ‘D’
Provare ‘su --help’ per ulteriori informazioni.

-D è un’opzione valida.

Assicurati di non aver inserito il trattino al di fuori del frammento di codice?

Comunque, mi chiedo se il processo di aggiornamento alla versione 13 sia fallito.

In tal caso, potresti dare un’occhiata e eventualmente pubblicare in questo argomento: PostgreSQL 13 update

Sì, sono ancora alla versione 12…

Scusa, sembra che questo sia gestito e controllato da un processo di livello superiore.

Se lo uccido, si riavvia automaticamente.

Prova: sv start postgres

come root

Intendi eseguirlo all’interno di un container Docker? Grazie.

SÏ, è lÏ che il servizio è in esecuzione.

Anche meglio, fai cosĂŹ: sv restart postgres

Poi controlla:

tail /var/log/postgres/current

Una situazione sana assomiglierĂ  a qualcosa del genere:

2021-01-21 20:21:10.284 UTC [575368] LOG: database system is ready to accept connections da qualche parte lĂŹ.

Ecco il registro degli errori -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: i file del database non sono compatibili con il server
2021-01-21 18:12:04.965 UTC [623] DETAIL: La directory dei dati è stata inizializzata da PostgreSQL versione 13, che non è compatibile con questa versione 12.3 (Debian 12.3-1.pgdg100+1).
pg_ctl: impossibile avviare il server
Esaminare l’output del registro.