Al intentar eliminar temas creados por un usuario específico desde el panel de administración → usuarios, me aparece el error 502.
¿Hay alguna otra forma de eliminar temas creados por un usuario específico?
Al intentar eliminar temas creados por un usuario específico desde el panel de administración → usuarios, me aparece el error 502.
¿Hay alguna otra forma de eliminar temas creados por un usuario específico?
Hola @Yogesh_g,
¿Estás intentando eliminar las 301.719 publicaciones creadas por este usuario?
Parece que eso dejará muchos temas sin sentido debido a la falta de publicaciones.
¿Sería la anonimización del usuario una opción para ti en esta situación?
Creo que estás recibiendo este error 502 debido a la configuración de “eliminar todas las publicaciones como máximo”.
He aumentado el límite a un número mayor que el que quiero eliminar y estos temas solo contienen publicaciones del mismo usuario.
¿Puedes explicarme cómo funciona la anonimización de usuarios? ¿Haría que todas las publicaciones fueran ocultas para todos los demás usuarios?
¿Hay alguna forma de acceder a la base de datos que estoy utilizando para alojar Discourse?
No, no oculta las publicaciones; elimina el nombre de usuario. Es una buena solución en ocasiones en las que el usuario solicita que se elimine su cuenta, ya que conserva el contenido, manteniendo intactos los temas de tu comunidad, al tiempo que hace que ese contenido sea anónimo, de modo que nadie sepa quién lo escribió. Se describe completamente aquí:
Si tienes un sitio alojado, lo mejor sería que el equipo de Discourse te ayude.
Esta es una situación bastante única y una gran cantidad de trabajo de [database] (base de datos), no me extraña que la solicitud esté caducando.
¡Suena muy excepcional! También recomendaría contactar al soporte de alojamiento para obtener ayuda con este caso.
Ok, me pondré en contacto con el soporte. Y los actualizaré aquí.
¿Hay alguna otra forma de eliminar todas las publicaciones de un usuario? ¿O puedo intentar crear un plugin personalizado para ello que elimine las publicaciones de la base de datos? (Mi cliente lo está pidiendo, pero no estoy seguro de que funcione para un gran número de publicaciones, ya que Discourse ya tiene la funcionalidad).
¿Debo crear un plugin para ello o no? Y si es así, ¿cómo funcionará?
@ Michael Brown @southpaw He creado un plugin para eliminar publicaciones de un usuario en lotes de un número determinado. He escrito algo de código Ruby para eliminar publicaciones. Actualmente, estoy utilizando la API de configuración para recibir entradas del administrador.
El desafío al que me enfrento es que quiero crear una página de administrador para el plugin que tenga algunos campos de entrada y un botón. Quiero que mi código Ruby se ejecute al hacer clic en ese botón.
Lo he intentado de varias maneras pero he fallado.
Necesito ayuda, ¿hay alguna forma posible de lograrlo en Discourse?
Hola @Yogesh_g,
![]()
Todavía no tengo experiencia escribiendo plugins, así que no tengo una respuesta rápida para ti sobre las preguntas que has hecho sobre cómo hacer que tu página de administrador funcione, pero me gustaría asegurarme de que recibes la ayuda que necesitas.
Tengo algunos problemas para juntar todas las piezas aquí, así que te envié un mensaje privado para obtener un poco más de detalle.
Continuado en How to execute server-side code when clicking a button?
Hola, comunidad de Discourse @pfaffman @merefield
Necesito eliminar todas las publicaciones creadas por un usuario en particular (un total de 301.719 publicaciones). He intentado varias formas, pero no he podido eliminarlas.
¿Cómo debería eliminar todas las publicaciones de ese usuario? Por favor, proporcione una manera. Llevo 3 meses luchando con esto.
¿Te refieres a eliminar permanentemente o a eliminar de forma lógica?
Eliminar permanentemente. No quiero que estas publicaciones se muestren a ningún usuario.
¿Te es útil este tema?
No creo que sea exactamente lo que buscas, pero ¿quizás puedas modificarlo para que se ajuste a tus necesidades?
Esto no funciona. Lo intenté antes.
Tuve un problema similar antes, necesitaba eliminar alrededor de 200000 publicaciones de diferentes usuarios con muchas condiciones. Cualquier método ordinario traería lentitud a largo plazo.
Finalmente tomé el camino más tonto. Bucle del 1 al id de publicación máximo. Si satisface la condición, elimínala. Me tomó aproximadamente una hora iterar a través de ellas (alrededor de 900000 publicaciones).
Intenté una forma similar, el servidor da un error de tiempo de espera, aquí está el código
# frozen_string_literal: true
module Jobs
class DeleteUserPosts < ::Jobs::Scheduled
every 2.minutes
def execute(args)
return unless SiteSetting.delete_user_topics_enabled?
username = SiteSetting.delete_posts_for_username
posts_per_batch = SiteSetting.delete_posts_in_single_batch.to_i
return unless username.present? && posts_per_batch.positive?
user = User.find_by(username: username)
return unless user.present?
posts = user.posts.order(created_at: :asc)
deleted_count = 0
posts.each do |post|
break if deleted_count >= posts_per_batch
if SiteSetting.delete_user_topics_dry_run?
Rails.logger.error("DeleteUserPosts eliminaría la publicación ID #{post.id} (#{post.topic.title} - #{post.excerpt}) (modo de simulación)")
else
Rails.logger.error("DeleteUserPosts eliminando la publicación ID #{post.id} (#{post.topic.title} - #{post.excerpt})")
begin
PostDestroyer.new(Discourse.system_user, post).destroy
deleted_count += 1
rescue StandardError => e
Rails.logger.error("Error al eliminar la publicación ID #{post.id}: #{e.message}")
end
end
end
# Cancelar el trabajo programado si no quedan más publicaciones
if posts.size <= posts_per_batch
self.class.cancel_scheduled_job
end
end
end
end
Esto obviamente puede salir mal. 300.000 publicaciones no es un número pequeño, no puedes cargarlas en la memoria a la vez.
¿Podrías compartir el fragmento de código que utilizaste o mostrar un ejemplo?