Retaire tous les posts correspondant à un motif

:bookmark: Ce guide fournit des instructions sur la façon de rebake tous les messages dans Discourse qui correspondent à une chaîne spécifique ou à une expression régulière, en utilisant la console Rails pour des options avancées supplémentaires.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur

:warning: Accès à la console requis

Vous souhaitez rebake tous les messages correspondant à une chaîne ou à une expression régulière ? C’est parti !

Accéder à votre site

Pour commencer, connectez-vous à votre Droplet Discourse via SSH et entrez dans le conteneur Docker de votre instance Discourse :

cd /var/discourse
./launcher enter app

Rebake tous les messages contenant une chaîne spécifique

Utilisez la commande suivante, en remplaçant pattern par la chaîne que vous souhaitez faire correspondre. Cette recherche est insensible à la casse.

rake posts:rebake_match["pattern"]

Par exemple, pour rebake tous les messages contenant :slight_smile: dans leur contenu brut :

rake posts:rebake_match[":slight_smile:"]

Rebake tous les messages correspondant à une expression régulière

:information_source: PostgreSQL utilise des expressions régulières POSIX pour effectuer la correspondance regex. La correspondance est insensible à la casse. Un drapeau sensible aux sauts de ligne ((?n)) est appliqué automatiquement, ce qui signifie que . ne correspondra pas aux caractères de nouvelle ligne et que ^/$ correspondront aux limites de ligne.

Pour les expressions régulières, utilisez cette commande.

rake posts:rebake_match["pattern",regex]

Exemples :

  • Rebake les messages contenant :slight_smile: ou Discourse :

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Rebake les messages commençant par Today :

    rake posts:rebake_match["^Today",regex]
    
  • Rebake les messages commençant par Today ou Yesterday :

    rake posts:rebake_match["^(Today|Yesterday)",regex]
    

Délai optionnel entre les rebakes

Pour ajouter un délai de 5 secondes entre chaque exécution de rebake, modifiez la commande comme suit. Ajustez 5 au nombre de secondes requis :

rake posts:rebake_match["pattern",string,5]

Avancé : Utiliser la console Rails

Pour les tâches où la tâche rake n’est pas suffisante, utilisez la console Rails.

Accéder à la console Rails

Depuis l’intérieur du conteneur Docker, lancez la console Rails :

rails c

Utiliser la tâche rake rebake uncooked

Définissez les messages ciblés comme « uncooked » pour un rebake. Quittez la console Rails après avoir exécuté la configuration, puis exécutez la commande de rebake :

Pour rebake toute une catégorie :

rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts

Exécuter une boucle dans la console Rails

Pour effectuer des opérations granulaires, sélectionnez les messages sous forme de tableau et rebakez chaque message directement.

Messages d’un utilisateur particulier

user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
  p.rebake!
end

Messages contenant une chaîne spécifique

posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
  p.rebake!
end
40 « J'aime »

Existe-t-il un moyen simple de dépublier tous les messages/fils créés avant une date spécifiée ?