Pesquisa não funciona mais após atualização 3.1.0.beta1

Desde a nossa atualização 3.1.0 hoje, a nossa Pesquisa deixou de funcionar.
A nossa equipa de sysadmin identificou um problema e forneceu-nos este log afirmando que se trata de um erro de aplicação.

Mais alguém está a ter este problema e quais podem ser as pistas para que possamos resolver o problema nós mesmos? Vejo que a pesquisa funciona perfeitamente no 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)
Screenshots do problema



Não pode ser um problema totalmente comum — o meu funciona perfeitamente. O mesmo aqui (acho que a Meta está na versão mais recente).

O que acontece ao tentar /modo-seguro?

Infelizmente, também não funciona no modo de segurança. Sem temas, sem modo de plugins.

Vemos que a pesquisa não funciona para Tópicos/Posts, mas funciona para Categorias/Tags e Usuários.

Você está usando uma instância externa do PostgreSQL? Se sim, qual é a versão?

Sim, estamos usando o PostgreSQL externo. A versão é 14.6-1

Nossa busca está completamente quebrada ao rodar contra o PostgreSQL 14, e é por isso que ainda estamos distribuindo o PostgreSQL 13 para todos que seguem nossa instalação padrão.

Eventualmente, corrigiremos isso, pois faremos o upgrade para o PostgreSQL 15 (ou 16) um dia, mas pode levar um tempo.

Obrigado. Estamos investigando como isso pode ter acontecido SE já tivemos outra versão do PostgreSQL anteriormente. Retornaremos assim que identificarmos o problema.

Se você tinha 14 anteriormente não é realmente relevante, o Discourse não é compatível com o PostgreSQL 14. Esse é o seu problema.

Já verifiquei a documentação em discourse/docs/INSTALL.md at main · discourse/discourse · GitHub, pois a documentação da nuvem não tem requisitos de servidor.

Vemos o requisito “Postgres 13+” aqui. Posso estar errado ao sugerir à sua equipe que adicione um aviso de que o Discourse suporta apenas versões 13.X? Talvez um aviso explícito de que as versões 14/15/… não são suportadas também seria útil em casos como o nosso.

Veja bem, tínhamos a versão 14 pelo menos desde dezembro, e tínhamos a versão estável do Discourse instalada meses antes. Recentemente, voltamos para a versão tests-passed, a busca funcionou como esperado. Hoje, atualizamos de 2.9.0.beta14 para 3.1.0.beta1 e agora está quebrado.

Alguma chance de você usar o plugin de respostas privadas?

Nós o temos instalado, ele está desativado nas configurações do Admin

Também tentamos e reproduzimos o problema no Modo de Segurança. Isso deveria importar de qualquer forma?

Incompreensível, mas esse foi o problema no meu caso (mesmos sintomas - embora com PostgreSQL13)
Tenho certeza que Richard vai corrigir em breve, enquanto isso um fork e uma edição simples são uma solução.

Ah. Que chato. Tenho um site que, acidentalmente, atualizei para o PG14 há um tempo e achei que ficaria tudo bem.

Acabei de fazer algumas buscas e elas não estavam obviamente terrivelmente quebradas. E o site é majoritariamente em chinês, então eu realmente não conseguiria dizer de qualquer forma.

Quão quebrada está e quão difícil será consertá-la?

O modo de segurança afeta apenas o lado do cliente. Esse erro está ocorrendo no servidor. Para verificar se o erro está relacionado ao plugin de respostas privadas, você precisará desinstalar completamente esse plugin.

Este erro parece estar relacionado a uma incompatibilidade de plugin com o Ruby 3.1.

então estou bastante confiante de que é o execute(readonly_mode) no plugin (e não tenho ideia do porquê :sweat_smile: )

Você está certo aqui @Benjamin_D.

Esse plugin realmente quebra a busca e aciona o erro 500.

Mas rodar PostgreSQL 14+ também quebrará a busca, mas de uma forma mais sutil, onde muitos resultados que seriam retornados no pg13 não retornarão no pg14+.

Então @kinetiksoft pode remover o plugin e reconstruir para que a busca não dê erro, mas ela ainda não funcionará normalmente por causa da versão do pg.

Agora posso confirmar que a Pesquisa funciona como esperado, já que removemos o plugin Discourse Private Replies

Nenhuma alteração foi feita no lado do servidor, o PostgreSQL ainda é 14.6-1, mas analisaremos as opções de downgrade na próxima semana.

Obrigado a todos, vocês salvaram nossa funcionalidade de pesquisa para este fim de semana.

P.S. Pedimos gentilmente à equipe do Discourse @ github que adicione um aviso sobre a versão do PostgreSQL na documentação oficial:

Você verificou a documentação sobre como executar o PostgreSQL externo? Está aqui no Meta, não no github. Toda a documentação está visível em Documentation - Discourse Meta

Desculpem todos! O plugin de respostas privadas estava realmente quebrando a busca (ou: Ruby 3.1 estava quebrando o plugin).
Agora está funcionando novamente.