Recupero da aggiornamento fallito/parzialmente applicato

Ho tentato di aggiornare la mia istanza Discourse, tuttavia a causa di alcuni problemi, sembra che sia fallito in uno stato parzialmente applicato. Quando eseguo ./launcher rebuild app, ricevo il seguente messaggio di errore, che indica una migrazione già (parzialmente) applicata:

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Qualsiasi indicazione su come recuperare da questo (o se devo accettare la sconfitta e fare una nuova installazione) sarebbe apprezzata. Grazie!

Puoi eseguire

./launcher start app

per avviare il vecchio container. In questo modo tornerai operativo.

Sì, ne sono consapevole (e l’ho fatto), tuttavia, mi stavo chiedendo quale dovrebbe essere la mia prossima mossa per quanto riguarda l’aggiornamento.

Oh. Non è stato utile allora :person_shrugging:

Ho avuto un problema simile, ma sembra improbabile che la mia soluzione ti aiuti.

Non hai SKIP_POST_DEPLOYMENT_MIGRATIONS impostato nel tuo app.yml, vero? Se è così, devi migrare il database con esso impostato a zero e poi ricostruire, ma non penso che questo sia il tuo problema.

No, non sembra.

Questo è quello che pensavo. Quindi potrebbe esserci un problema effettivo legato alla possibilità di migrare da un punto specifico a quello attuale. Ma non dovrebbe succedere.

Dai un’occhiata:

Ho svuotato tutte le tabelle che mi davano errori (una per una, alla fine erano 7), finché non sono riuscito a ricostruire l’app senza errori.

Nel tuo caso sembra che il problema sia una colonna:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

Forse dovresti cercare a quale tabella appartiene, per poterla svuotare, oppure puoi semplicemente eliminare quella colonna.

Credo che il problema sia che, migrando parzialmente, quelle tabelle siano già create, quindi non può ricrearle e restituisce un errore. Forse si potrebbe aggiungere un condizionale a questo processo, in modo che non dia errori? (Non sono un esperto) @pfaffman

Sembra giusto, @undasein.

Penso che tu voglia rimuovere la colonna bookmarkable_id dalla tabella dei segnalibri. Quindi, dopo essere entrato nel container ed essere entrato in postgres in questo modo:

cd /var/discourse
./launcher enter app
su - postgres
psql

Quindi faresti

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Ma fare un backup solo del database non sarebbe una cattiva idea se il forum è in esecuzione. In caso contrario, puoi fare un backup con discourse backup dopo la riga enter app sopra.

Stesso problema qui! Questa è la soluzione corretta da seguire?

Questa era la mia ipotesi. Puoi provare e farci sapere.

Non sono esperto di discourse.

@sam hai qualche idea su come procedere? L’installazione e l’aggiornamento standard si rivelano un incubo.

Quanto sopra è il modo corretto per risolvere questo problema?

Grazie in anticipo

purtroppo non ha funzionato, ricevo ancora

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

C’è stata qualche altra azione da intraprendere dopo questi comandi?

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Grazie per la tua assistenza

Ciao Nick,
Sto cercando di riprodurlo, qual è il commit della tua istanza?
potresti provare con

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

nel tuo app.yml, risale a 10 giorni fa, poco prima del rifacimento di un commit annullato che sembra aver avuto problemi simili.

Buongiorno Ben,

Sarebbe possibile darmi una panoramica dei comandi per farlo, per favore?

Posso aggiornare e tutto il resto facilmente, ma è la prima volta che qualcosa va storto e, ad essere onesti, sono completamente fuori dalla mia zona di comfort lol

Potresti eseguire ./launcher start app e controllare la versione installata su https://your.domain/admin in modo che io possa provare a ripercorrere i tuoi passi. Ci sono plugin?

Ciao Ben,

Versione installata: 2.9.0.beta2
(5374e587a3)

Plugin installati:
discourse-reactions
docker_manager
styleguide

Grazie,
Nick

./launcher start app
-bash: ./launcher: File o directory non esistente
 cd /var/discourse

Prima

./launcher start app

Quindi, ho notato che avevo alcuni aggiornamenti di Ubuntu, quindi tutto sul server è aggiornato

ho riprovato e ancora

PG::DuplicateColumn: ERRORE:  la colonna "bookmarkable_id" della relazione "bookmarks" esiste già

Questa sembra una soluzione probabile. Dovresti essere in grado di eseguire l’aggiornamento a questa versione e forse allora potrai raggiungere la versione corrente? Qualcosa del genere ha senso per me.