No se pueden restaurar las publicaciones de descripción de categoría creadas por un usuario eliminado

En algún momento, después de que se crearon ciertas categorías, el usuario que las creó fue eliminado. Al revisar el registro, veo que Discourse eliminó automáticamente esos publicaciones al mismo tiempo que se eliminó al usuario.

No nos dimos cuenta de que esto causaba problemas hasta más tarde, cuando quedó claro que, aunque los administradores aún pueden ver (y editar) las publicaciones de descripción de las categorías afectadas, cuando los usuarios normales intentan ver esas publicaciones, reciben este mensaje: “Error; al intentar cargar; Algo salió mal.”

Estas publicaciones de descripción de categoría aparecen con fondo rojo. Puedo ver que fueron eliminadas y cuándo. También veo el botón “restaurar”, pero al hacer clic no hace nada.

Si voy a la configuración de una de las categorías afectadas (haciendo clic en su botón Editar) y luego en el botón Editar descripción, soy llevado a la publicación eliminada correspondiente. Puedo realizar cambios y guardarlos; después de actualizar la página, aparece la nueva descripción. Sin embargo, los usuarios no administradores aún no pueden ver el contenido de la publicación (solo ese error).

Logré cambiar la propiedad de una de las publicaciones a mi propio usuario administrador, pero el botón “restaurar” sigue sin hacer nada.

He encontrado informes similares en meta Discourse, pero hasta ahora ninguno de los consejos ha sido de ayuda.

Encontré una referencia a una persona que pudo restaurar una publicación afectada de manera similar usando la API de Discourse, y comencé a investigar al respecto, pero no pude encontrar nada sobre la restauración de publicaciones en la documentación de la API. Véase Can't recover a topic by a deleted user

Espero que exista una solución que no implique recrear desde cero las categorías afectadas.

Actualización: cuando hago clic en el botón “restaurar” de una de estas publicaciones, se genera una entrada en el registro de errores:

Error: Prohibido
URL: mysite/assets/ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js
Línea: 1
Columna: 266460
Ubicación de la ventana: mysite/t/about-the-showcases-and-use-cases-category/28
3 Me gusta

¿Alguien emitió un comando de eliminación para el usuario que creó las categorías? ¿Hay alguna razón particular por la que ese usuario fue eliminado en lugar de anonimizarse?

Es cierto que el tema de descripción de la categoría será propiedad del usuario que crea la categoría, por lo que eliminar a ese usuario (y todas sus publicaciones) podría causar esto. @tshenry, ¿podemos probar este escenario la próxima semana?

3 Me gusta

Pude probarlo rápidamente ahora mismo y reproducir los mismos resultados.

  1. Crear una categoría con un usuario administrador
  2. Revocar su estatus de administrador y eliminar el usuario
  3. El tema “Acerca de” de la categoría se elimina de forma suave cuando se elimina el usuario
  4. Intentar deseliminar/restaurar el tema no funciona
  5. Cambiar la propiedad técnicamente funciona, pero el tema permanece en un estado de eliminación extraño sin importar lo que hagas desde la interfaz.

Desde la consola parece que el registro posts asociado al tema se elimina cuando se elimina el usuario. El registro del tema tiene muchos ceros al observar varios atributos relacionados con publicaciones.

Podría valer la pena que un ingeniero vea si podemos ser un poco más elegantes aquí, pero sospecho que es más fácil decirlo que hacerlo.


Pude encontrar una solución alternativa para volver a un estado correcto, pero tuve que usar la línea de comandos. @jrivettcsa, recomendaría hacer una copia de seguridad antes de intentar esto:

Valores necesarios

Asegúrate de copiar cualquier contenido del tema “Acerca de” que quieras usar más tarde en un bloc de notas o similar, luego procede con lo siguiente:

Ingresa a la consola de rails

cd /var/discourse
./launcher enter app
rails c

Reemplaza <ABOUT_TOPIC_ID> en el comando de abajo con el ID del tema “Acerca de” de la categoría, luego ejecuta para eliminar permanentemente el tema roto.

Topic.where(id: <ABOUT_TOPIC_ID>).destroy_all

Presiona la tecla q para volver a la consola si es necesario

La categoría sigue asociada al tema defectuoso, por lo que necesitamos limpiar eso. Reemplaza <CATEGORY_ID> en el comando de abajo con el ID de la categoría, luego ejecuta.

Category.where(id: <CATEGORY_ID>).update_all(topic_id: nil)

Presiona la tecla q para volver a la consola si es necesario

Sal de la consola de rails y ejecuta la siguiente tarea rake para crear un nuevo tema “Acerca de” para la categoría:

exit
rake categories:create_definition

¡Ahora esa categoría debería estar corregida! Puedes repetir el proceso tantas veces como sea necesario.

6 Me gusta

Sí, se realizaron algunos cambios lamentables por parte de alguien que debería haber sabido mejor. No puedo decir más. Afortunadamente, Discourse registra estos eventos.

1 me gusta

Gracias por confirmar el problema y proporcionar una solución. Lo intentaré y publicaré los resultados aquí.

1 me gusta

¡Esta solución funcionó perfectamente. Gracias!

Arreglé cada uno individualmente, pero creo que podría haber hecho las cosas de destroy_all y update_all en una sola sesión de la consola de Rails y luego ejecutar el comando rake categories:create_definition una vez al final. ¿Qué opinas? Podría ahorrarle a alguien unos minutos en algún momento.

4 Me gusta

Definitivamente es un error, @jrivettcsa: cuando eliminar un usuario puede dejar el sitio roto, eso es grave. Lo solucionaremos.

4 Me gusta

Gracias por reportar ese problema. He realizado una corrección en este PR:

Cuando se elimina un usuario, la publicación que describe la categoría ya no se elimina. En su lugar, el autor de la publicación se cambia del usuario original al usuario del sistema.

4 Me gusta