Diese Anleitung beschreibt, wie Sie alle Beiträge in Discourse, die mit einem bestimmten String oder regulären Ausdruck übereinstimmen, neu rendern („rebake"), wobei die Rails-Konsole für zusätzliche erweiterte Optionen genutzt wird.
Erforderliche Benutzerstufe: Administrator
Zugriff auf die Konsole erforderlich
Möchten Sie alle Beiträge neu rendern, die mit einem String oder regulären Ausdruck übereinstimmen? Dann legen wir los!
Zugriff auf Ihre Site
Verbinden Sie sich zunächst per SSH mit Ihrem Discourse-Droplet und betreten Sie den Docker-Container Ihrer Discourse-Instanz:
cd /var/discourse
./launcher enter app
Alle Beiträge neu rendern, die einen bestimmten String enthalten
Verwenden Sie den folgenden Befehl und ersetzen Sie pattern durch den zu suchenden String. Diese Suche ist nicht groß-/kleinschreibungsabhängig.
rake posts:rebake_match["pattern"]
Beispiel: Alle Beiträge neu rendern, die :slight_smile: in ihrem rohen Inhalt enthalten:
rake posts:rebake_match[":slight_smile:"]
Alle Beiträge neu rendern, die mit einem regulären Ausdruck übereinstimmen
PostgreSQL verwendet POSIX reguläre Ausdrücke, um Regex-Übereinstimmungen durchzuführen. Die Übereinstimmung ist nicht groß-/kleinschreibungsabhängig. Ein neuerzeilenempfindliches Flag (
(?n)) wird automatisch angewendet, was bedeutet, dass.keine Zeilenumbruchzeichen und^/$nur an Zeilenbegrenzungen übereinstimmen.
Für reguläre Ausdrücke verwenden Sie diesen Befehl:
rake posts:rebake_match["pattern",regex]
Beispiele:
-
Beiträge neu rendern, die
:slight_smile:oderDiscourseenthalten:rake posts:rebake_match[":slight_smile:|Discourse",regex] -
Beiträge neu rendern, die mit
Heutebeginnen:rake posts:rebake_match["^Heute",regex] -
Beiträge neu rendern, die mit
HeuteoderGesternbeginnen:rake posts:rebake_match["^(Heute|Gestern)",regex]
Optionale Verzögerung zwischen den Neubearbeitungen
Um eine Verzögerung von 5 Sekunden zwischen jeder Neubearbeitung einzufügen, ändern Sie den Befehl wie folgt. Passen Sie die 5 an die gewünschte Anzahl von Sekunden an:
rake posts:rebake_match["pattern",string,5]
Erweitert: Nutzung der Rails-Konsole
Für Aufgaben, bei denen die Rake-Aufgabe nicht ausreicht, verwenden Sie die Rails-Konsole.
Zugriff auf die Rails-Konsole
Starten Sie innerhalb des Docker-Containers die Rails-Konsole:
rails c
Nutzung der Rake-Aufgabe rebake_uncooked
Setzen Sie gezielte Beiträge auf „uncooked", um sie neu zu rendern. Beenden Sie die Rails-Konsole nach dem Ausführen des Setup-Schritts und führen Sie dann den Befehl zum Neubearbeiten aus:
Zum Neubearbeiten einer gesamten Kategorie:
rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts
Durchführen einer Schleife in der Rails-Konsole
Für granulare Operationen wählen Sie Beiträge als Array aus und rendern jeden Beitrag direkt neu.
Beiträge eines bestimmten Benutzers
user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
p.rebake!
end
Beiträge, die einen bestimmten String enthalten
posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
p.rebake!
end