La ricerca non funziona più dopo l'aggiornamento 3.1.0.beta1

Dal nostro aggiornamento 3.1.0 di oggi, la nostra ricerca non funziona più.
Il nostro team di sysadmin ha identificato un problema e ci ha fornito questo log che indica un errore dell’applicazione.

Qualcun altro riscontra questo problema e quali potrebbero essere gli indizi per risolverlo da soli? Vedo che la ricerca funziona perfettamente su Discourse Meta.

Started GET "/search?q=37%20%20realm&page=1" for [IP_REDACTED] at 2023-01-13 11:19:36 +0000
Processing by SearchController#show as JSON
  Parameters: {"q"=>"37  realm", "page"=>"1"}
Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.0ms | Allocations: 1555)
ArgumentError (wrong number of arguments (given 1, expected 0))
lib/search.rb:285:in `execute'
app/controllers/search_controller.rb:73:in `show'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:366:in `call'
config/initializers/008-rack-cors.rb:24:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'
Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 1, expected 0)
Screenshot del problema



Non può essere un problema del tutto comune: il mio funziona benissimo. Stessa cosa qui (credo che Meta sia all’ultima versione).

Cosa succede quando provi /safe-mode?

Purtroppo, non funziona nemmeno in modalità provvisoria. Nessun tema, nessuna modalità plugin.

Vediamo che la ricerca non funziona per Argomenti/Post, ma funziona per Categorie/Tag e Utenti.

Stai utilizzando un’istanza esterna di PostgreSQL? Se sì, qual è la versione?

Sì, stiamo utilizzando PostgreSQL esterno. La versione è 14.6-1

1 Mi Piace

La nostra ricerca è completamente interrotta quando viene eseguita su PostgreSQL 14, motivo per cui stiamo ancora distribuendo PostgreSQL 13 per tutti coloro che seguono la nostra installazione standard.

Alla fine lo risolveremo poiché un giorno passeremo a PostgreSQL 15 (o 16), ma potrebbe volerci un po’ di tempo.

3 Mi Piace

Grazie. Stiamo indagando su come ciò possa essere accaduto SE in precedenza avevamo altre versioni di PostgreSQL. Ti ricontatteremo una volta identificato il problema.

1 Mi Piace

Il fatto che tu avessi precedentemente 14 non è molto importante, Discourse non è compatibile con PostgreSQL 14. Questo è il tuo problema.

1 Mi Piace

Ho controllato la documentazione di discourse/docs/INSTALL.md at main · discourse/discourse · GitHub invece, poiché la documentazione di Cloud non ha affatto requisiti del server.

Vediamo il requisito “Postgres 13+” qui. Potrei sbagliarmi nel suggerire al tuo team di aggiungere una nota che Discourse supporta solo le versioni 13.X? Forse, un avviso esplicito che le versioni 14/15/… non sono supportate sarebbe utile anche in casi come il nostro.

Vedi, abbiamo la versione 14 almeno da dicembre, e avevamo la versione Stable di Discourse installata da mesi prima. Recentemente siamo tornati alla versione tests-passed, la ricerca ha funzionato come previsto. Oggi, siamo passati da 2.9.0.beta14 a 3.1.0.beta1 e ora è rotto.

C’è la possibilità che utilizziate il plugin delle risposte private?

4 Mi Piace

L’abbiamo installato, è disabilitato nelle impostazioni di Amministrazione

Abbiamo anche provato e riprodotto il problema in Modalità Provvisoria. Dovrebbe comunque avere importanza?

Non è chiaro, ma questo era il problema nel mio caso (stessi sintomi, anche se con PostgreSQL13)
Sono sicuro che Richard lo risolverà a breve, nel frattempo una fork e una semplice modifica sono una soluzione.

2 Mi Piace

Oh. Peccato. Ho un sito che ho aggiornato per lo più accidentalmente a PG14 un po’ di tempo fa, e ho pensato che andasse bene.

Ho appena fatto alcune ricerche e non erano palesemente terribilmente interrotte. E il sito è per lo più in cinese, quindi non sarei comunque in grado di dirlo.

Quanto è interrotta e quanto sarà difficile risolverlo?

2 Mi Piace

La modalità sicura influisce solo sul lato client. Questo errore si verifica sul server. Per verificare se l’errore è correlato al plugin delle risposte private, dovrai disinstallare completamente quel plugin.

Questo errore sembra effettivamente correlato a un’incompatibilità del plugin con Ruby 3.1.

4 Mi Piace

allora sono abbastanza sicuro che sia execute(readonly_mode) nel plugin (e non ho idea del perché :sweat_smile: )

3 Mi Piace

Hai perfettamente ragione @Benjamin_D.

Quel plugin causa l’interruzione della ricerca e genera l’errore 500.

Tuttavia, anche l’esecuzione di PostgreSQL 14+ interromperà la ricerca, ma in modo più subdolo, poiché molti risultati che verrebbero restituiti su pg13 non verranno restituiti su pg14+.

Quindi @kinetiksoft può rimuovere il plugin e ricostruire per evitare che la ricerca generi errori, ma non funzionerà comunque normalmente a causa della versione di pg.

4 Mi Piace

Ora posso confermare che la ricerca funziona come previsto ora che abbiamo rimosso il plugin Discourse Private Replies

Non sono state apportate modifiche lato server, PostgreSQL è ancora 14.6-1, ma la prossima settimana valuteremo le opzioni di downgrade.

Grazie a tutti, avete salvato la nostra funzionalità di ricerca per questo fine settimana.

P.S. Chiedo gentilmente al team Discourse @ github di aggiungere un avviso per la versione PostgreSQL nella documentazione ufficiale:

3 Mi Piace

Hai controllato la documentazione sull’esecuzione di PostgreSQL esterno? Si trova qui su Meta, non su github. Tutta la documentazione è visibile su Documentation - Discourse Meta

1 Mi Piace

Mi dispiace a tutti! Il plugin delle risposte private stava effettivamente compromettendo la ricerca (o: Ruby 3.1 stava compromettendo il plugin).
Ora funziona di nuovo.

5 Mi Piace