Errores 500 y actualización fallida

Nuestra instalación de Discourse, una instalación estándar basada en el repositorio oficial pero que utiliza la integración SSO como su único sistema de inicio de sesión, ha estado funcionando durante varios años sirviendo a una gran base de usuarios, ejecutándose en un servidor dedicado basado en Ubuntu que opera otras aplicaciones, sin problemas significativos, me complace decir.

Desafortunadamente, recientemente sufrió un pequeño fallo espontáneo y ya no parece funcionar en absoluto.

Los informes iniciales fueron que el sitio estaba mostrando muchos errores 500 aparentemente aleatorios y que las notificaciones no se estaban entregando, pero por lo demás todavía funcionaba. El contexto era que la instalación se actualizó por última vez hace uno o dos meses y no se habían realizado cambios en ella ni en el entorno del servidor, por lo que este fue un desarrollo sorprendente.

Confirmamos que se estaban produciendo errores 500 y primero intentamos reiniciar el servidor y el contenedor sin éxito. Se ejecutó un “apt-get update” para actualizar todos los paquetes. También intentamos actualizar Discourse a través del backend, pero al iniciar sesión con el enlace de administrador, no se enviaron enlaces de inicio de sesión por correo electrónico, y después de reiniciar el contenedor, la página de inicio de sesión de administrador solo generó un error 500.

También revisé el entorno del servidor en busca de anomalías en el hardware, el sistema operativo o de otro tipo, y nada parecía estar mal.

A continuación, intentamos una reconstrucción completa y una actualización de “git pull” a través de la CLI. Esto falló durante las migraciones de la base de datos de la actualización con el siguiente error:

I, [2022-08-09T23:15:21.229857 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1]  INFO -- : docker_manager is already at latest compatible version

I, [2022-08-09T23:15:23.939220 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT:  UPDATE bookmarks
        SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
        WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.

Si hay una inconsistencia en la base de datos, no tengo idea de cómo ocurrió… Puedo proporcionar el resto del historial de la consola si es necesario.

Ejecutar “./discourse-doctor” se completó sin problemas aparentes, excepto por una advertencia sobre la configuración del servidor de correo: “certificate verify failed (self signed certificate)”, lo que podría explicar por qué los correos electrónicos no se enviaban. Anteriormente se enviaban con la configuración tal como está, y el servidor de correo parece estar funcionando sin problemas, así que no estoy seguro de esto.

Actualmente, el sitio está completamente caído (solo devuelve errores 500 después de la actualización fallida). Realmente no tenemos idea de cómo proceder en este punto, más allá de intentar buscar soporte externo. ¡Cualquier orientación sería muy apreciada!

1 me gusta

Parece que un índice está corrupto o algo similar. Necesitarás eliminar o cambiar esos registros para que la base de datos pueda ser migrada.

Si estás familiarizado con SQL, podrías ser capaz de resolverlo, quizás con un poco de ayuda aquí. Si estás realmente atascado y tienes presupuesto, puedes contactarme o preguntar en Marketplace.

2 Me gusta