Perdona si es una pregunta tonta… ¿Por qué en Discourse no es posible eliminar fácilmente los mensajes de la base de datos?
Discourse utiliza un mecanismo llamado “eliminación suave” que facilita corregir errores. Además, permite distinguir entre “eliminados para otros usuarios” y “eliminados para administradores”.
También mantiene la integridad de la base de datos. ¿Qué pasaría si una publicación eliminada fue citada (antes de ser eliminada)? En ese caso, la publicación que la citó tendría una referencia a una publicación que ya no existe. Esto podría provocar todo tipo de errores.
Gracias, ahora lo entiendo… el único problema es si hay muchos mensajes eliminados.
Ya se ha discutido y solicitado en varias ocasiones, por ejemplo:
Aunque entiendo que la eliminación suave puede ser útil, después de cierto período (por ejemplo, una semana o un mes), sería deseable que los elementos eliminados se borren realmente para ahorrar espacio y también garantizar el cumplimiento legal, por ejemplo, porque se publicó algo ilegal o se deben eliminar datos personales para cumplir con el RGPD.
Tener que iniciar sesión y ejecutar una tarea de Rake para reemplazar el mensaje con «esto ha sido eliminado» es un poco poco elegante.
¡Ops… lo siento! Al venir de phpBB, pensé que era posible.
ya está implementado
Saludos,
Pero, ¿cómo lo hacemos???
He estado probando eso esta mañana y no logro entenderlo.
¿Alguna sugerencia?
Bueno, la configuración debe establecerse en Administración > Configuración > Seguridad (actualmente oculta por alguna razón) y luego cada administrador deberá tenerla concedida como moderador.
Una vez concedida, aparecerá en el menú de administración de publicaciones.
Ah, eso podría ser mi obstáculo. Estaba buscando can_permanently_delete en la configuración de administración y no pude verlo.
La configuración del sitio está oculta porque no fomentamos su uso. Fue desarrollada para los casos en que se publica información sensible y debe eliminarse completamente de la base de datos. Además, esa operación no es de tipo masivo de todos modos.
Dado que es una configuración oculta del sitio, la única forma de habilitarla es desde la consola.
¡Esto es casi exactamente lo que necesito! Gracias.
¿Cómo debería escribir la sintaxis para que solo cubra todos los mensajes eliminados antes de la fecha xxxx?
Eso sería Post.with_deleted.where("deleted_at < 'YYYY-mm-dd'").update_all(...)
¿Puedes indicarnos cómo habilitarlo desde la consola?
Aquí están las instrucciones:
Característica habilitada desde la consola, pero ¿cómo puedo eliminar los mensajes eliminados? Todos los mensajes están presentes en mensajes-eliminados.
Realmente no soy un experto en esto, pero parece que hay suficientes fragmentos de información en este tema para crear el código que buscas.
El tema que enlacé al principio incluye las advertencias de los creadores sobre que esto es territorio inexplorado y que lo haces bajo tu propio riesgo. Sin embargo, también proporcionan la pieza ‘destroy_all’, que parece útil, y sugieren comenzar con lotes.
Ese tema también tiene un par de ejemplos sobre cómo apuntar a publicaciones o temas, lo cual (combinado con los ejemplos que @RGJ ha dado sobre cómo apuntar a publicaciones específicas diferentes) debería acercarte bastante.
Aunque no tengo experiencia con esto, así que temo no poder dar el visto bueno, ya que nunca lo he hecho. ![]()
Para eliminar las publicaciones antiguas en nuestro foro, utilicé lo siguiente. Es el resultado de combinar The proper way to completely delete hundred of topics via rails? y las sugerencias de @RGJ.
Al final, opté por hacerlo así, ya que realmente quería eliminar los datos de la base de datos para proteger la privacidad de los usuarios. Reescribir el texto como “Esta publicación ha sido eliminada” aún deja el historial de ediciones intacto y relativamente accesible, por lo que no es suficiente.
Como teníamos 20,000 temas que eliminar, ¡llevó un tiempo!
Topic.with_deleted.where("deleted_at < '2021-08-28'").limit(1000).destroy_all
Como esto dejó muchas publicaciones huérfanas, tuve que seguir con:
Post.where('topic_id not in (select id from topics)').limit(1000).destroy_all
Imagino que tu ./launcher cleanup también liberó algo de espacio después ![]()
Lamentablemente, aunque se ejecutó como se esperaba, la tabla posts sigue llena de mensajes huérfanos. La tabla topics se ha limpiado correctamente. Los mensajes no son accesibles cuando intento visitarlos con /t/topic_id, pero esto probablemente se deba a no tener un ID de tema válido. Sin embargo, no termino de entender por qué siguen estando en la tabla.
¿Alguien puede sugerir una mejor manera de limpiar la tabla posts?