Aggiornamento fallito: versione Docker non supportata

Ubuntu 16
Ho cliccato sull’aggiornamento web come abbiamo fatto molte volte. Ora è fallito e l’app non riesce a ricostruire la versione di Docker non supportata.

Qualche idea? Potrei provare ad aggiornare il sistema operativo, ma oggi non avevo molto tempo.

C’è modo di tornare indietro?

Ho provato a impostare la versione sul vecchio hash, ma immediatamente ottengo la versione di Docker non supportata quando tento di ricostruire

Non puoi eseguire l’upgrade.

Sarei passato a una nuova VM e avrei ripristinato il database lì. È più facile, ha avuto poco downtime e, se qualcosa va storto, puoi semplicemente continuare a usare il server funzionante.

Oh. Mi dispiace. Non ho letto abbastanza attentamente.

No. Non puoi tornare indietro.

Potresti essere in grado di aggiornare Docker se usi l’installazione di Docker.

Ho aggiornato il sistema operativo, ecc., e ha passato l’upgrade a PostgreSQL 15, ma ora, quando ricostruisco l’app, ottengo

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

Impossibile avviare Discourse a causa di questo errore durante l'inizializzazione del plugin:

PG::UndefinedColumn: ERROR:  colonna "require_message" non esiste
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

Dopo aver eseguito il rebuild (dopo l’upgrade di PostgreSQL)

Esecuzione dell'upgrade
------------------
Analizzare tutte le righe nel nuovo cluster                       ok
Congelare tutte le righe nel nuovo cluster                        ok
Eliminare file da pg_xact vecchio                                ok
Copiare pg_xact vecchio sul nuovo server                          ok
Impostare il più antico XID per il nuovo cluster                ok
Impostare il prossimo ID di transazione ed epoch per il nuovo cluster       ok
Eliminare file da pg_multixact/offsets vecchi                   ok
Copiare pg_multixact/offsets vecchio sul nuovo server             ok
Eliminare file da pg_multixact/members vecchi                   ok
Copiare pg_multixact/members vecchio sul nuovo server             ok
Impostare il prossimo ID multixact e offset per il nuovo cluster        ok
Ripristinare gli archivi WAL                                    ok
Impostare i counter frozenxid e minmxid nel nuovo cluster         ok
Ripristinare gli oggetti globali nel nuovo cluster                 ok
Ripristinare gli schemi del database nel nuovo cluster               ok
Copiare i file delle relazioni utente                                 ok
Impostare il prossimo OID per il nuovo cluster                            ok
Sincronizzare i dati sul disco                                 ok
Creare script per eliminare il vecchio cluster                       ok
Verificare aggiornamenti estensioni                              avviso

La tua installazione contiene estensioni che dovrebbero essere aggiornate
con il comando ALTER EXTENSION. Il file
    update_extensions.sql
quando eseguito da psql come superutente del database, aggiornerà
queste estensioni.


Aggiornamento completato
----------------
Le statistiche dell'ottimizzatore non vengono trasferite tramite pg_upgrade.
Una volta avviato il nuovo server, considera di eseguire:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Eseguendo questo script eliminerai i file di dati del vecchio cluster:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
Upgrade di PostgreSQL completato

Il vecchio database 13 è memorizzato in /shared/postgres_data_old

Per completare l'upgrade, ricostruisci di nuovo usando:

./launcher rebuild app

Puoi fare qualcosa? Non sono sicuro di come manchi una colonna.

Sì. Ci sono alcuni argomenti su problemi simili. Una migrazione è stata annullata, credo, quindi ti ritrovi in uno stato di limbo.

Forse aggiungi la colonna manualmente.

Non sono sicuro di come fare, più specificamente a quale tabella ecc. Ci sono delle informazioni in merito che posso trovare. Ho trovato quel post che hai menzionato, ma non c’erano dettagli specifici.

Grazie mille!

Non riesco nemmeno ad montare il database abbastanza da aggiungere la colonna. Proverò a disabilitare tutti i plugin e vedere se riesco almeno ad avviare il container.

Ok, ecco come l’abbiamo risolto (non è per i deboli di cuore)

  1. Aggiorna Ubuntu a una versione che supporti Docker 20+
    Eravamo su Ubuntu 16, ho dovuto passare ad almeno Ubuntu 20, quindi abbiamo eseguito questo aggiornamento due volte
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Una volta arrivati su Ubuntu 20, abbiamo dovuto aggiornare Docker, cosa che Ubuntu si è rifiutato di fare da solo.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Aggiungi il repository alle sorgenti Apt:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release & echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. Questo ci ha portato a Docker 28
  2. Quindi esegui
./launcher rebuild app
  1. Questo aggiornerà il tuo PostgreSQL da 13 a 15, vedi:
    PostgreSQL 15 update
  2. Una volta che il database si è aggiornato con successo, abbiamo eseguito
./launcher rebuild app
  1. Questo ha generato un errore relativo a una colonna mancante
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

Non è possibile avviare Discourse a causa di questo errore durante l'inizializzazione del plugin:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. A questo punto non c’è modo di avviare il container, quindi sono andato su app.yml e ho disabilitato tutti i plugin, quindi ho eseguito nuovamente il rebuild.
  2. L’app è stata finalmente ricostruita, quindi sono stato in grado di accedere alla console rails per aggiungere manualmente la colonna sopra.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. Una volta presente la colonna, sono tornato a app.yml, ho abilitato tutti i plugin e ho eseguito nuovamente il rebuild.
  2. Il rebuild è riuscito… e siamo online!

Grazie @pfaffman per la tua pronta risposta, persino nel fine settimana. Stiamo per creare un nuovo droplet aggiornato e trasferirci. Questo doveva essere un rapido aggiornamento sul posto dall’interfaccia web. Ma immagino che lo script non testì la compatibilità di Docker. Quando ha aggiornato Discourse Docker, ha generato un errore di incompatibilità di Docker.

È stata interamente colpa nostra per essere rimasti su una versione così vecchia di Ubuntu 16; una delle cose buone e cattive di un sistema stabile è che tende a persistere.

1 Mi Piace

Sono contento che tu sia riuscito a farlo funzionare! È piuttosto impressionante!

Non puoi fare aggiornamenti rapidi quando il tuo sistema operativo ha 4 anni oltre la fine del suo ciclo di vita. :wink:

1 Mi Piace

Sì, lezione imparata, grazie ancora!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.