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

1 curtida

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.

3 curtidas

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

1 curtida

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

1 curtida

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?

4 curtidas

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.

2 curtidas

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?

2 curtidas

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.

4 curtidas

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

3 curtidas

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.

4 curtidas

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:

3 curtidas

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

1 curtida

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

5 curtidas