La búsqueda ya no funciona después de la actualización 3.1.0.beta1

Desde nuestra actualización 3.1.0 de hoy, nuestra búsqueda ya no funciona.
Nuestro equipo de sysadmin identificó un problema y nos proporcionó este registro que indica que se trata de un error de aplicación.

¿Alguien más experimenta este problema y cuáles podrían ser las pistas para que podamos resolver el problema nosotros mismos? Veo que la búsqueda funciona perfectamente en 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)
Capturas de pantalla del problema



No puede ser un problema totalmente común; el mío funciona perfectamente. Lo mismo aquí (creo que Meta está en la última versión).

¿Qué sucede al intentar /safe-mode?

Lamentablemente, tampoco funciona en modo seguro. Sin temas, sin modo de complementos.

Vemos que la búsqueda no funciona para Temas/Publicaciones, pero sí funciona para Categorías/Etiquetas y Usuarios.

¿Está utilizando una instancia externa de PostgreSQL? Si es así, ¿cuál es la versión?

Sí, estamos utilizando PostgreSQL externo. La versión es 14.6-1

1 me gusta

Nuestra búsqueda está completamente rota cuando se ejecuta contra PostgreSQL 14, por lo que todavía enviamos PostgreSQL 13 para todos los que siguen nuestra instalación estándar.

Eventualmente lo arreglaremos ya que actualizaremos a PostgreSQL 15 (o 16) algún día, pero puede llevar un tiempo.

3 Me gusta

Gracias. Estamos investigando cómo pudo haber sucedido SI hemos tenido otras versiones de PostgreSQL anteriormente. Nos pondremos en contacto con usted una vez que identifiquemos el problema.

1 me gusta

Si tenías 14 anteriormente no es realmente relevante, Discourse no es compatible con PostgreSQL 14. Ese es tu problema.

1 me gusta

He consultado la documentación de discourse/docs/INSTALL.md at main · discourse/discourse · GitHub en su lugar, ya que la documentación de Cloud no tiene requisitos de servidor en absoluto.

Vemos el requisito “Postgres 13+” aquí. ¿Puedo estar equivocado al sugerir a su equipo que añada un aviso de que Discourse solo admite versiones 13.X? Quizás, un aviso explícito de que las versiones 14/15/… no son compatibles también sería útil en casos como el nuestro.

Como ven, hemos tenido la versión 14 al menos desde diciembre, y hemos tenido la versión estable de Discourse instalada desde meses antes. Recientemente, volvimos a la versión tests-passed, la búsqueda funcionó como se esperaba. Hoy, actualizamos de 2.9.0.beta14 a 3.1.0.beta1 y ahora está roto.

¿Hay alguna posibilidad de que utilices el plugin de respuestas privadas?

4 Me gusta

Lo tenemos instalado, está deshabilitado en la configuración de Administrador

También lo hemos intentado y reproducido el problema en Modo Seguro. ¿Debería importar de todos modos?

No está claro, pero ese fue el problema en mi caso (mismos síntomas, aunque con PostgreSQL13).
Estoy seguro de que Richard lo solucionará en breve, mientras tanto, un fork y una edición simple son una solución.

2 Me gusta

Oh. Qué lástima. Tengo un sitio que, en su mayor parte, actualicé accidentalmente a PG14 hace un tiempo y pensé que estaría bien.

Solo hice algunas búsquedas y no estaban obviamente terriblemente rotas. Y el sitio está mayormente en chino, así que de todos modos no podría saberlo realmente.

¿Qué tan rota está y qué tan difícil será arreglarlo?

2 Me gusta

El modo seguro solo afecta al lado del cliente. Este error está ocurriendo en el servidor. Para verificar si el error está relacionado con el plugin de respuestas privadas, necesitará desinstalar completamente ese plugin.

Este error parece estar relacionado con una incompatibilidad del plugin con Ruby 3.1.

4 Me gusta

entonces estoy bastante seguro de que es el execute(readonly_mode) en el plugin (y no tengo ni idea de por qué :sweat_smile: )

3 Me gusta

Tienes razón aquí @Benjamin_D.

Ese plugin sí interrumpe la búsqueda y provocará el error 500.

Pero ejecutar PostgreSQL 14+ también interrumpirá la búsqueda, pero de una manera más sutil, donde muchos resultados que se devolverían en pg13 no se devolverán en pg14+.

Así que @kinetiksoft puede eliminar el plugin y reconstruir para que la búsqueda no genere errores, pero aún así no funcionará normalmente debido a la versión de pg.

4 Me gusta

Ahora puedo confirmar que la búsqueda funciona como se esperaba ahora que eliminamos el plugin Discourse Private Replies

No se realizaron cambios en el lado del servidor, PostgreSQL sigue siendo 14.6-1, pero la próxima semana analizaremos las opciones de degradación.

Gracias a todos, salvaron nuestra funcionalidad de búsqueda para este fin de semana.

P.D. Le pedimos amablemente al equipo de Discourse @ github que agregue una advertencia sobre la versión de PostgreSQL en la documentación oficial:

3 Me gusta

¿Has consultado la documentación sobre la ejecución de PostgreSQL externo? Está aquí en Meta, no en GitHub. Toda la documentación es visible en Documentation - Discourse Meta

1 me gusta

¡Lo siento a todos! El plugin de respuestas privadas estaba rompiendo la búsqueda (o: Ruby 3.1 estaba rompiendo el plugin).
Ya funciona de nuevo.

5 Me gusta