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
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.
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.
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.
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)
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
Una volta che il database si è aggiornato con successo, abbiamo eseguito
./launcher rebuild app
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...
^
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.
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
Una volta presente la colonna, sono tornato a app.yml, ho abilitato tutti i plugin e ho eseguito nuovamente il rebuild.
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.