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.
Niveau d’utilisateur requis : Administrateur
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
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:ouDiscourse: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
TodayouYesterday: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