Errore aggiornamento Discourse "FAILED TO BOOTSTRAP"

Ciao a tutti,

Primo post qui, grazie in anticipo per l’ospitalità. Stiamo eseguendo un set di aggiornamenti routine (anche se in ritardo) sul nostro forum basato su Discourse (https://forum.troygrady.com) e siamo arrivati a un punto in cui l’aggiornamento fallisce dopo aver eseguito i comandi da riga di comando “git pull” e “rebuild”, come indicato dalle istruzioni a schermo.

Di seguito trovate l’output del comando “./launcher rebuild app”. Ho anche eseguito lo script “discourse doctor” e posso pubblicare o inviare un link all’output, se ritenete che ciò non comporti rischi di sicurezza eccessivi.

Preciso che, sebbene sia uno sviluppatore PHP/SQL piuttosto competente con una certa esperienza di amministrazione di applicazioni Linux, non ho alcuna familiarità tecnica con Discourse e non sono stato io a configurare l’installazione iniziale. Il vostro preferito, lo so!

Sto semplicemente seguendo le istruzioni a schermo, che sono iniziate cliccando sui pulsanti blu “aggiorna” nell’interfaccia per Docker. Una volta completata quella fase, ho visto l’istruzione di accedere da riga di comando ed eseguire git pull e launcher rebuild. È così che sono arrivato a questo punto.

Aggiungo anche che il nostro forum funzionava perfettamente prima di tutto questo, senza alcun problema, nel caso possa aiutare nella diagnosi. L’unico motivo per cui stiamo eseguendo questo aggiornamento è semplicemente rimanere aggiornati con le release che voi state pubblicando, per non rimanere troppo indietro. Questo è il conflitto centrale della mia mentalità “se non è rotto, non aggiustarlo”, temendo che l’aggiornamento possa causare un errore oltre le mie capacità di risoluzione. E infatti, eccoci qui.

Al momento della scrittura, il forum è completamente offline e, dato che è un componente fondamentale della nostra attività, vorrei metterlo di nuovo operativo il prima possibile.

Qualsiasi indicazione sarà molto apprezzata!

ERRORE

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ fallito con codice di uscita #<Process::Status: pid 3972 exit 1>
Posizione dell’errore: /pups/lib/pups/exec_command.rb:112:in `spawn’
Esecuzione fallita con i parametri {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
f89318158c2c276c69a60d600def8a838ae4ad4bc7bafbe665fb1cd77c130ad1
** FALLIMENTO DELL’AVVIO ** Si prega di scorrere verso l’alto e cercare i messaggi di errore precedenti; potrebbero essercene più di uno.
./discourse-doctor può aiutare a diagnosticare il problema.

ehi, benvenuto nella community di Discourse.

Dove stai installando, quale sistema operativo? Stai seguendo la nostra guida ufficiale?

Penso che tu abbia effettivamente messaggi di errore precedenti; sembra che il tuo database (server) non sia accessibile.

Forse dovresti considerare un hosting gestito una volta che il tuo forum sarà di nuovo operativo…

1 Mi Piace

Ciao Gavin! Grazie per la risposta rapida. Siamo su un Droplet di Digital Ocean e, quando accedo, vedo:

Benvenuto su Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-210-generic x86_64)

Per quanto riguarda l’uso della tua guida ufficiale, non saprei dire. Si tratta di un’installazione che stiamo utilizzando da circa 3-4 anni senza problemi, anche se non sono stato io a configurarla inizialmente. Di solito ha richiesto solo aggiornamenti tramite browser e, occasionalmente, ricostruzioni da riga di comando, che hanno funzionato tutti senza richiedere altro intervento da parte nostra fino a ora.

Ho salvato l’intera output del terminale della ricostruzione in un file e posso esaminarla. Tuttavia, siamo in un ambiente Droplet virtuale e non abbiamo apportato modifiche da quando l’abbiamo configurato. Anzi, accediamo raramente, dato che Discourse funziona regolarmente con gli aggiornamenti tramite browser. Quindi non sono sicuro di cosa sia cambiato per rendere improvvisamente il database inaccessibile.

Certo. È un caso in cui le cose hanno funzionato perfettamente per anni, quindi non c’è molta pressione per cambiare. Tuttavia, saremmo felici di assumere qualcuno per dare occasionalmente un’occhiata a ciò che abbiamo installato e assicurarsi che tutto sia aggiornato, invece di farlo io. Esiste una risorsa o un elenco per trovare esperti di Discourse che potrebbero essere disponibili per questo tipo di lavoro?

Grazie!

Dovresti aggiornarlo. È vecchio. Molto vecchio.

Ma prima di tutto, mettiamoti in grado di farlo funzionare. Puoi pubblicare il registro degli errori? Dobbiamo vedere qual è l’errore effettivo.

Ok, ho cercato avvisi ed errori nell’output della ricompilazione, ecco cosa ho trovato (di seguito).

227:initdb: avviso: abilitata l’autenticazione “trust” per le connessioni locali
294:update-alternatives: avviso: forzata la reinstallazione dell’alternativa /usr/share/postgresql/13/man/man1/psql.1.gz perché il gruppo di collegamenti psql.1.gz è danneggiato
324:update-alternatives: avviso: forzata la reinstallazione dell’alternativa /usr/share/postgresql/13/man/man1/postmaster.1.gz perché il gruppo di collegamenti postmaster.1.gz è danneggiato

1684:createdb: errore: creazione del database fallita: ERRORE: il database “discourse” esiste già
1811:I, [2021-08-29T20:18:40.246150 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
1813:I, [2021-08-29T20:18:40.253584 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
2563:StandardError: Si è verificato un errore, questa e tutte le migrazioni successive sono state annullate:
2698:-- add_column(:groups, :imap_last_error, :text)
2961:** BOOTSTRAP FALLITO ** scorri verso l’alto e cerca i messaggi di errore precedenti, potrebbero essercene più di uno.
3118:createdb: errore: creazione del database fallita: ERRORE: il database “discourse” esiste già
3245:I, [2021-08-29T20:22:40.262592 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
3247:I, [2021-08-29T20:22:40.274767 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
3960:StandardError: Si è verificato un errore, questa e tutte le migrazioni successive sono state annullate:
4087:** BOOTSTRAP FALLITO ** scorri verso l’alto e cerca i messaggi di errore precedenti, potrebbero essercene più di uno.
4224:/errore – cerca la parola ‘errore’
4358:createdb: errore: creazione del database fallita: ERRORE: il database “discourse” esiste già
4485:I, [2021-08-29T20:26:59.373901 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
4487:I, [2021-08-29T20:26:59.381142 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
5200:StandardError: Si è verificato un errore, questa e tutte le migrazioni successive sono state annullate:
5327:** BOOTSTRAP FALLITO ** scorri verso l’alto e cerca i messaggi di errore precedenti, potrebbero essercene più di uno.

Grazie ancora per aver dato un’occhiata a questo, Gavin, e scusa per gli aggiornamenti del sistema operativo trascurati.

Sopra c’è solo ciò che ottengo cercando le parole “errore” e “avviso” nell’output dello script, il cui contenuto completo ho salvato qui. Se c’è qualcos’altro che dovrei cercare in quell’output, fammi sapere, sono felice di pubblicarlo.

Ah, scusa, mi rendo conto che l’output sia piuttosto poco esplicativo. Ecco i dettagli sul messaggio “StandardError”. Sembra che una query INSERT sia fallita a causa di un duplicato di chiave. Ho oscurato il corpo della query per migliorarne la leggibilità; posso includerlo se necessario.

I, [2021-08-29T20:23:37.257772 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse DETAIL: Key (id)=(-2) already exists.
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse STATEMENT: INSERT INTO
[…]
FROM plugin_store_rows
WHERE plugin_name = ‘discourse-data-explorer’ AND type_name = ‘JSON’

rake aborted!
StandardError: Si è verificato un errore; questa e tutte le successive migrazioni sono state annullate:

ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
DETAIL: Key (id)=(-2) already exists.

prova questo

1 Mi Piace

Sì, funziona (come hai visto).

Qualcosa è andato storto durante l’aggiornamento stesso.

Pubblica semplicemente le tue esigenze in #marketplace o sfoglialo per vedere chi risponde regolarmente lì.

tutto quello che devi fare è, una volta che Discourse sarà di nuovo attivo e funzionante.

  • eseguire il backup di Discourse.
  • scaricare il backup
  • aggiornare il droplet
  • ricostruire l’app

poi dovresti essere a posto per altri anni

Fantastico, grazie.

Se ho capito bene, sembra che ci sia una tabella del database utilizzata da un plugin chiamato “data explorer” che contiene una riga duplicata, e l’eliminazione di tale riga duplicata permette allo script di ricostruzione di procedere. Da quel thread, sembra anche che questo errore — o errori simili — si siano verificati in passato e che potrebbero esserci stati aggiornamenti di Discourse per prevenirne il verificarsi in futuro. Ciò significa che i futuri aggiornamenti che eseguiamo potrebbero non incontrare questo problema.

Fammi sapere se pensi che io abbia interpretato correttamente!

Ti riferisci all’aggiornamento di Ubuntu? Se è così, ho capito.

Corretto

Ancora una volta corretto :slight_smile:

:smiley:

Ok! Ho le mie istruzioni. Grazie mille per il feedback rapido.

1 Mi Piace

Per chiudere la questione, per chiunque abbia riscontrato questo errore, sembra che si siano verificati alcuni problemi.

Per quanto riguarda l’aggiornamento stesso, la riga duplicata nel plugin “data_explorer” stava causando un problema ed è stata necessario rimuoverla.

Tuttavia, come parte di questo processo, abbiamo anche eseguito un aggiornamento del sistema operativo da Ubuntu 16 a 20, il che ha causato un errore di rete, rendendo il droplet di Digital Ocean irraggiungibile al riavvio. Nello specifico, sembra che, mentre il sistema operativo passava alla nuova configurazione “Netplan”, qualcosa nella configurazione impediva al script di avvio dell’interfaccia di rete di completarsi al momento dell’esecuzione. Quindi il droplet si è avviato, ma non la rete. Accedendo successivamente tramite la console di recupero nel browser ed eseguendo nuovamente lo script dell’interfaccia di rete, abbiamo ripristinato l’interfaccia, consentendoci di raggiungerla di nuovo dall’esterno. Finché non dovremo riavviare il droplet, saremo a posto fino a quando non troveremo il tempo di spegnere e testare una soluzione per la configurazione di Netplan.

So che questo è probabilmente un caso limite, ma ricordo di aver letto da qualche parte che gli aggiornamenti del sistema operativo generalmente non causano problemi. E anche se questo è probabilmente vero la maggior parte delle volte, non è stato così in questo caso, e ci ha tenuti offline per buona mezza giornata, finché i fusi orari non si sono allineati per permettere al nostro personale tecnico esterno di riportarci online.

Quindi, per ora tutto risolto. Grazie a tutti per il rapido contributo.

5 Mi Piace