En essayant de supprimer les sujets créés par un utilisateur spécifique depuis le panneau d’administration → utilisateurs. Cela me renvoie une erreur 502.
Existe-t-il un autre moyen de supprimer les sujets créés par un utilisateur spécifique ?
En essayant de supprimer les sujets créés par un utilisateur spécifique depuis le panneau d’administration → utilisateurs. Cela me renvoie une erreur 502.
Existe-t-il un autre moyen de supprimer les sujets créés par un utilisateur spécifique ?
Salut @Yogesh_g,
Tu essaies de supprimer les 301 719 publications créées par cet utilisateur ?
Cela semble laisser beaucoup de sujets qui n’ont pas de sens à cause des publications manquantes.
Est-ce que l’anonymisation de l’utilisateur aurait du sens pour toi dans cette situation ?
Je pense que tu obtiens cette erreur 502 à cause du paramètre « supprimer toutes les publications max ».
J’ai augmenté la limite à un nombre supérieur à celui que je souhaite supprimer et ces sujets ne contiennent que des publications du même utilisateur.
Pouvez-vous expliquer comment fonctionne l’anonymisation des utilisateurs, cela rendrait-il toutes les publications cachées pour tous les autres utilisateurs ?
Existe-t-il un moyen d’accéder à la base de données que j’utilise pour l’hébergement Discourse ?
Non, cela ne cache pas les messages ; cela supprime le nom d’utilisateur. C’est une bonne solution parfois lorsque l’utilisateur demande la suppression de son compte, car cela préserve le contenu, en gardant les sujets de votre communauté intacts, tout en rendant ce contenu anonyme, de sorte que personne ne sache qui l’a écrit. C’est décrit en détail ici :
Si vous avez un site hébergé, il serait préférable de laisser l’équipe Discourse vous aider.
C’est une situation assez unique et une quantité massive de travail de [database] - pas étonnant que la requête expire.
Cela semble très exceptionnel ; je recommanderais également de contacter le support d’hébergement pour obtenir de l’aide à ce sujet.
Ok, je contacterai le support. Et je vous tiendrai au courant ici.
Existe-t-il un autre moyen de supprimer tous les messages d’un utilisateur ? Ou puis-je essayer de créer un plugin personnalisé pour cela qui supprime les messages de la base de données ? (Mon client le demande, mais je ne suis pas sûr que cela fonctionne pour un grand nombre de messages, car Discourse a déjà cette fonctionnalité).
Dois-je créer un plugin pour cela ou non ? Et si oui, comment fonctionnera-t-il ?
@ Michael Brown @southpaw J’ai créé un plugin pour supprimer les publications d’un utilisateur par lots d’un nombre donné. J’ai écrit du code Ruby pour supprimer les publications. Actuellement, j’utilise l’API des paramètres pour recevoir les entrées de l’administrateur.
Le défi auquel je suis confronté est le suivant : je veux créer une page d’administration pour le plugin qui contient des champs de saisie et un bouton. Je veux que mon code Ruby s’exécute au clic de ce bouton.
J’ai essayé plusieurs méthodes mais j’ai échoué.
Y a-t-il un moyen possible d’y parvenir dans Discourse ?
Salut @Yogesh_g,
![]()
Je n’ai pas (encore !) d’expérience dans l’écriture de plugins, donc je n’ai pas de réponse rapide pour vous sur les questions que vous avez posées concernant le fonctionnement de votre page d’administration, mais j’aimerais m’assurer que vous recevez l’aide dont vous avez besoin.
J’ai quelques difficultés à rassembler toutes les pièces ici, j’ai donc envoyé un message privé pour obtenir un peu plus de détails.
Salut, communauté discourse @pfaffman @merefield
Je dois supprimer tous les messages créés par un utilisateur particulier (un total de 301 719 messages). J’ai essayé plusieurs méthodes, mais j’ai échoué à les supprimer.
Comment dois-je supprimer tous les messages de cet utilisateur ? Veuillez me fournir une solution. Je lutte avec cela depuis 3 mois.
voulez-vous dire suppression définitive ou suppression نرم?
Suppression définitive. Je ne veux pas que ces publications soient montrées à qui que ce soit.
Ce sujet vous est-il utile ?
Je ne pense pas que ce soit exactement ce que vous recherchez, mais vous pourriez peut-être le modifier pour cibler ce dont vous avez besoin ?
Cela ne fonctionne pas. J’ai essayé plus tôt.
J’ai eu un problème similaire auparavant, j’ai dû supprimer environ 200 000 publications de différents utilisateurs avec de nombreuses conditions. Toute méthode ordinaire entraînerait un décalage à long terme.
Finalement, j’ai choisi la méthode la plus stupide. Boucle de 1 à l’ID de publication maximum. Si elle satisfait la condition, supprimez-la. Il m’a fallu environ une heure pour les parcourir (environ 900 000 publications).
J’ai essayé une méthode similaire, le serveur renvoie une erreur de délai d’attente, voici le code
# 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 supprimerait le message ID #{post.id} (#{post.topic.title} - #{post.excerpt}) (mode simulation)")
else
Rails.logger.error("DeleteUserPosts supprime le message 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("Erreur lors de la suppression du message ID #{post.id}: #{e.message}")
end
end
end
# Annuler le travail planifié s'il ne reste plus de messages
if posts.size <= posts_per_batch
self.class.cancel_scheduled_job
end
end
end
end
Cela peut évidemment mal tourner. 300 000 publications, ce n’est pas un petit nombre, vous ne pouvez pas les charger toutes en mémoire d’un coup.
Pouvez-vous partager l’extrait de code que vous avez utilisé, ou montrer un exemple