Eliminar masivamente todos los temas de una categoría

:bookmark: Esta guía proporciona instrucciones sobre cómo eliminar en masa todos los temas dentro de una categoría en una instancia de Discourse autoalojada.

:person_raising_hand: Nivel de usuario requerido: Administrador del sistema

:warning: Se requiere acceso SSH a tu servidor

Eliminar todos los temas de una categoría puede ser necesario por varias razones, como reorganizar el contenido o borrar discusiones obsoletas. Esta guía te acompaña paso a paso para realizar esta tarea de forma segura en un servidor de Discourse autoalojado.

:warning: Esta es una acción destructiva. Asegúrate de hacer una copia de seguridad de tu foro antes de continuar.

Pasos para eliminar temas en una categoría

  1. Identifica el slug de la categoría: Este es el nombre utilizado en la URL de la categoría.
  2. Accede a tu servidor: Usa SSH para iniciar sesión en tu servidor.
ssh username@tu-servidor.com
  1. Navega al directorio de Discourse:
cd /var/discourse
  1. Ingresa a la aplicación de Discourse:
./launcher enter app
  1. Ejecuta el comando de eliminación: Reemplaza "micategoria" con el slug de tu categoría.
rake destroy:topics["micategoria"]

:information_source: Este proceso puede tomar tiempo dependiendo del número de temas.

Eliminar temas en subcategorías

Para eliminar temas en una subcategoría, incluye el slug de la categoría padre en tu comando. Por ejemplo:

rake destroy:topics["subcategoria","categoriapadre"]

Eliminar todos los temas en todas las categorías

:warning: ¡Esta acción borrará todos los temas de todas las categorías!

rake destroy:topics_all_categories

Preguntas frecuentes

¿Cuánto tiempo guarda Discourse los temas eliminados? Todavía puedo acceder a los temas con un enlace directo.

Los temas permanecen en la base de datos después de su eliminación. Solo el personal podrá seguir viendo los temas eliminados.

¿Cómo puedo eliminar permanentemente los temas de la base de datos?

Puedes eliminar permanentemente las publicaciones (y sus temas) de la base de datos utilizando la tarea destroy:posts de Rake. Esto requiere que la configuración del sitio can_permanently_delete esté habilitada primero.

Pasa los IDs de las publicaciones como una lista separada por comas:

rake destroy:posts[4,8,15,16,23,42]

También puedes pasar los IDs de las publicaciones desde un archivo:

cat post_ids.txt | rake destroy:posts

¿Es posible restringir la eliminación de temas a un período de tiempo (entre dos fechas)?

Deberías hacerlo desde la consola de Rails. Un comando similar al siguiente debería funcionar:

 Topic.where("created_at.....").each do |t|
   first_post = t.ordered_posts.first
   PostDestroyer.new(Discourse.system_user, first_post).destroy if first_post
 end

¿Cómo encuentro el slug o ID de mi categoría?

La tarea destroy:topics utiliza el slug de la categoría (el nombre en la URL de la categoría). Puedes listar todas las categorías con sus IDs y slugs ejecutando:

rake categories:list

Información adicional

Para más información sobre otras operaciones administrativas, consulta:

22 Me gusta