Errori 500 e aggiornamento fallito

La nostra installazione di Discourse, un’installazione standard basata sul repository ufficiale ma che utilizza l’integrazione SSO come unico sistema di accesso, è in funzione da diversi anni servendo una vasta base di utenti, in esecuzione su un server dedicato basato su Ubuntu che gestisce altre applicazioni, senza problemi significativi, sono lieto di dirlo.

Sfortunatamente, di recente ha subito un piccolo guasto spontaneo e non sembra più funzionare affatto.

I rapporti iniziali indicavano che il sito presentava molti errori 500 apparentemente casuali e le notifiche non venivano recapitate, ma per il resto funzionava ancora. Il contesto era che l’installazione era stata aggiornata un mese o due fa e non erano state apportate modifiche ad essa o all’ambiente del server, quindi questo è stato uno sviluppo sorprendente.

Abbiamo confermato che si verificavano errori 500 e abbiamo prima provato a riavviare il server e il container senza alcun effetto. È stato eseguito un “apt-get update” per aggiornare tutti i pacchetti. Abbiamo anche provato ad aggiornare Discourse tramite il backend, ma mentre accedevamo con il link di amministrazione, nessun link di accesso veniva inviato via email e dopo il riavvio del container, la pagina di accesso dell’amministratore generava solo un errore 500.

Ho anche controllato l’ambiente del server per eventuali anomalie hardware, del sistema operativo o altro, e nulla sembrava essere fuori posto.

Successivamente abbiamo tentato una ricostruzione completa e un aggiornamento “git pull” tramite CLI. Questo è fallito durante le migrazioni del database dell’aggiornamento con il seguente errore:

I, [2022-08-09T23:15:21.229857 #1]  INFO -- : > cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1]  INFO -- : docker_manager is already at latest compatible version

I, [2022-08-09T23:15:23.939220 #1]  INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT:  UPDATE bookmarks
        SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
        WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.

Se c’è un’incoerenza nel database, non ho idea di come sia accaduta… Posso fornire il resto della cronologia della console se necessario.

L’esecuzione di “./discourse-doctor” è stata completata senza apparenti problemi, ad eccezione di un avviso sulla configurazione del server di posta - “certificate verify failed (self signed certificate)” - che potrebbe spiegare perché le email non venivano inviate. In precedenza venivano inviate con la configurazione attuale e il server di posta sembra funzionare altrimenti senza problemi, quindi non sono sicuro di questo.

Attualmente il sito è completamente inattivo (restituisce solo errori 500 dopo il fallimento dell’aggiornamento). Non abbiamo davvero idea di come procedere a questo punto, oltre a cercare supporto esterno. Qualsiasi guida sarebbe molto apprezzata!

1 Mi Piace

Sembra che un indice sia corrotto o qualcosa di simile. Sarà necessario eliminare o modificare tali record in modo che il database possa essere migrato.

Se hai familiarità con SQL potresti essere in grado di capirlo, magari con un piccolo aiuto qui. Se sei davvero bloccato e hai un budget puoi contattarmi o chiedere in Marketplace.

2 Mi Piace