Le impostazioni si ripristinano da sole

Ho un’istanza di Discourse attiva da una settimana e presenta alcuni dei sintomi più strani che non riesco a risolvere, in parte perché nei log non appare assolutamente nulla di utile.

Il sintomo più evidente è che se vado nelle impostazioni, modifico una configurazione e poi clicco sulla spunta verde, la modifica viene accettata e tutto sembra corretto. Tuttavia, se ricarico la pagina delle impostazioni, c’è un’alta probabilità che venga mostrata la vecchia impostazione o quella nuova. Continuando a ricaricare, a volte appare un’impostazione, a volte l’altra.

Ancora peggio, non si tratta solo della schermata delle impostazioni: a volte sembra che anche la funzionalità del server stesso cambi. Ad esempio, se provo a caricare un nuovo logo, a volte viene mostrato quello vecchio e a volte quello nuovo.

Per rispondere alla domanda ovvia: no, non sto eseguendo più istanze dietro un load balancer; è un’unica istanza.

Non sono sicuro che sia correlato, ma ho notato anche che il plugin math di Discourse non viene renderizzato correttamente. Mentre le equazioni vengono visualizzate correttamente nell’anteprima, una volta pubblicato il post, lo script JavaScript non sembra essere incluso e quindi non viene renderizzato correttamente. Il problema con le equazioni non è la priorità qui, ma lo menziono nel caso possa fornire ulteriori indizi.

Sono davvero bloccato: con i log che sembrano tutti normali, non sono nemmeno sicuro di cosa pubblicare per ottenere aiuto. Qualsiasi idea sarebbe gradita.

Ciò implica un’installazione gravemente compromessa. Rimuovi tutti i plugin di terze parti e ricostruisci.

Ci ho provato senza successo. Molto probabilmente c’è qualcosa che non va nel modo in cui lo sto installando.

Sono uno sviluppatore anch’io: hai idea di cosa possa essersi rotto durante l’installazione e causare questo problema? Qualche indizio su dove iniziare a fare debug e risoluzione dei problemi?

Come stai installando? Stai usando la guida ufficiale fornita su GitHub?

Inizialmente ho seguito quel processo. Purtroppo non supporta la maggior parte degli ambienti di produzione di livello aziendale a mia disposizione. La maggior parte dei framework gestisce, avvia e distribuisce container. A causa della natura dell’approccio di installazione standard, non è possibile lavorare con questi strumenti e ambienti.

Di conseguenza, sto cercando di migliorare/riparare il processo in modo che possa essere installato ovunque sia supportata una distribuzione standard basata su Docker. Sebbene questo sforzo stia funzionando per la maggior parte, è il bug che ho segnalato in origine a cui sto facendo fatica a trovare una soluzione.

Una volta che sarà funzionante, lo rilascerò naturalmente per gli altri. Ho passato l’ultimo anno ad attendere che Discourse supportasse Docker standard, ma ho deciso di fare io stesso il contributo. Siamo così vicini, ma spero che qualcuno con più esperienza di me possa dirmi dove guardare.

Qualsiasi aiuto è gradito! Anche solo un suggerimento su dove guardare, dove fare il debug o delle idee sarebbero molto apprezzati.

Sei sicuro che la richiesta stia arrivando correttamente? Cosa vedi nella scheda di rete degli strumenti per sviluppatori?

Il comportamento che descrivi è tipico di un ambiente che genera errori lato Javascript.

Grazie, potrebbe rivelarsi molto utile. Dato che il plugin MathJax sembrava funzionare in modo sporadico per poi smettere, sembra probabile che sia legato a JavaScript.

Sono appena andato a provare a impostare una configurazione dopo aver svuotato la cache, facendo attenzione a monitorare la scheda di rete. Non sono comparsi errori prima o dopo la modifica di un’impostazione (anche se il bug si è manifestato).

Un motivo per cui non ha senso che la modifica non venga applicata affatto è il comportamento. Effettuo una modifica, poi aggiorno la pagina e sembra che la modifica venga annullata. Ma se continuo semplicemente ad aggiornare (senza tentare di apportare di nuovo la modifica), la modifica appare circa il 50% delle volte. Ogni volta che aggiorno, c’è circa il 50% di probabilità che venga visualizzata la vecchia impostazione rispetto a quella nuova.

Ho anche trovato il seguente errore nella console, ma penso sia irrilevante?

Impossibile trovare widget actions-summary-item nel registro

Prova semplicemente la modalità provvisoria per eliminare rapidamente tutti quei plugin.

Hai più contenitori web in esecuzione?

Ho provato questo, come avevo fatto in precedenza. Non ha aiutato. Ma sono scettico sul fatto di essere stato davvero in modalità provvisoria. Sono andato in */safe-mode e ho ottenuto la finestra di dialogo per entrare in modalità provvisoria. L’ho accettata. Ma ho notato che il tema Material Design che uso era ancora visibile. Quindi, anche se pensavo di essere in modalità provvisoria, forse non lo ero davvero?

In ogni caso, il bug è persistito.

Non credo che lo stia facendo… :wink:

Due container: uno per Sidekiq e uno per il core di Discourse. Solo un’istanza della coppia. Sto eseguendo Postgres e Redis come servizi gestiti su macchine separate.

Ops. Scusa, era la domanda ovvia a cui hai già risposto.

Modifica: forse non è nemmeno questa, ma avevo un problema simile quando utilizzavo un database Redis che era già in uso da un altro processo.

Credo di aver capito perché la modalità provvisoria non funzionava. Si disattivava quando aggiornavo la pagina.

Ho appena testato in modalità provvisoria, ma il problema persiste.

E l’API restituisce 200?

Dipende da cosa intendi. Nella scheda di rete “ispeziona” per il debug, tutto risulta con codice 200; la console mostra solo l’errore che ho menzionato sopra (probabilmente non correlato). Nei log di Docker, quando provo a impostare la configurazione, vedo quanto segue che conferma il successo dell’operazione. Eppure, quando ricarico la pagina delle impostazioni, il 50% delle volte appare l’impostazione ld e il 50% delle volte quella nuova.

> 2019-08-20T13:14:15.960335498Z Started PUT "/admin/site_settings/categories_topics" for 213.127.19.53 at 2019-08-20 13:14:15 +0000
> 2019-08-20T13:14:15.968667966Z Processing by Admin::SiteSettingsController#update as */*
> 2019-08-20T13:14:15.968951769Z   Parameters: {"categories_topics"=>"25", "id"=>"categories_topics"}
> 2019-08-20T13:14:15.978407541Z   Rendering text template
> 2019-08-20T13:14:15.978607623Z   Rendered text template (0.0ms)
> 2019-08-20T13:14:15.978834745Z Completed 200 OK in 10ms (Views: 0.6ms | ActiveRecord: 0.0ms)
> 2019-08-20T13:18:39.821498901Z [ N 2019-08-20 13:18:39.8209 4304/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 6157, application /opt/bitnami/discourse (production)
> 2019-08-20T13:18:59.866033984Z [ N 2019-08-20 13:18:59.8655 4304/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 5973, application /opt/bitnami/discourse (production)
> 2019-08-20T13:19:04.848923491Z [ N 2019-08-20 13:19:04.8484 4304/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 6018, application /opt/bitnami/discourse (production)
> 2019-08-20T13:19:08.900933057Z [ N 2019-08-20 13:19:08.9004 4304/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 5995, application /opt/bitnami/discourse (production)
> 2019-08-20T13:19:09.499349110Z [ N 2019-08-20 13:19:09.4989 4304/T4 age/Cor/CoreMain.cpp:1146 ]: Checking whether to disconnect long-running connections for process 6041, application /opt/bitnami/discourse (production)
> 2019-08-20T13:19:29.645095032Z Creating scope :open. Overwriting existing method Poll.open.

Allora, come è stato installato? Se non stai utilizzando l’installazione standard, quale metodo di installazione e pacchetto stai usando?

Ouch… Bitnami…

Di che tipo di processi si tratta, quelli a cui ci si riferisce?

Non utilizza l’installazione standard, anche se l’ho usata come guida per imparare. In pratica, ho dovuto scrivere e modificare i file Docker per farli funzionare con Docker Compose. Una volta che Docker Compose funzionava in locale, l’ho convertito nella sua forma JSON in modo che potesse essere utilizzato con gli strumenti aws-cli.

Quindi il processo di installazione presenta differenze sostanziali rispetto a quello standard.