Alle Beiträge neu backen, die einem Muster entsprechen

:bookmark: 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.

:person_raising_hand: Erforderliche Benutzerstufe: Administrator

:warning: 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

:information_source: 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: oder Discourse enthalten:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Beiträge neu rendern, die mit Heute beginnen:

    rake posts:rebake_match["^Heute",regex]
    
  • Beiträge neu rendern, die mit Heute oder Gestern beginnen:

    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
40 „Gefällt mir“

Gibt es eine einfache Möglichkeit, alle Beiträge/Threads, die vor einem bestimmten Datum erstellt wurden, zu “entkochen”?