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!

1 Mi Piace

Puoi eseguire

./launcher start app

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

2 Mi Piace

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

2 Mi Piace

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.

1 Mi Piace

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.

2 Mi Piace

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?

2 Mi Piace

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
2 Mi Piace

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.

1 Mi Piace