Um ein großes Discourse neu zu ordnen, habe ich in Zusammenarbeit mit meiner Site-Leitung ein einfaches Framework geschrieben, um eine Reihe von Ruby-Skripten zu verpacken, die über eine YAML-Konfigurationsdatei gesteuert werden. Auf diese Weise kann ich ein Backup auf einer Staging-Site wiederherstellen, mein Skript ausführen, Feedback erhalten, ein paar Zeilen YAML ändern, das Backup wiederherstellen, das Skript mit neuer Konfiguration ausführen und wiederholen, bis ich zufrieden bin.
Ich habe fast 600 Zeilen Konfiguration für meine Website und das würde manuell über die Benutzeroberfläche nicht passieren. Nicht einmal einmal, geschweige denn viele Male, um es richtig zu machen. Das weiß ich, denn als ich das letzte Mal weitreichende Änderungen vorschlug, gab ich buchstäblich auf. Im Gegensatz dazu kann ich mit diesem Skript nun den gesamten Zyklus in nur wenigen Minuten pro Iteration abschließen, obwohl die Website etwa eine halbe Million Beiträge und über 100 Kategorien hat. Dies gibt mir schnelles Feedback von meiner Site-Leitung und ich werde bereit sein, meine Website schnell zu migrieren.
Eine detailliertere Dokumentation finden Sie in der README-Datei im Repository mit dem Code:
Dieses Skript führt keine Fehlerprüfung durch. Es ist ziemlich verrückt, es auf Ihrer Live-Site auszuführen. Es ist dazu gedacht, auf einer Staging-Site ausgeführt zu werden, das Ergebnis zu validieren und dann live genommen zu werden. Als Autor beabsichtige ich immer noch, es auf diese Weise auszuführen. Wenn Sie es direkt auf einer Live-Site ausführen, müssen Sie alle Teile behalten, wenn es kaputt geht. ![]()
Aus der Dokumentation könnte eine Konfigurationsdatei wie folgt aussehen:
---
- describe:
context: Alter Name
category: 7
name: Neuer Name
description: Neue Beschreibung der Kategorie
slug: neuer-slug
- movePosts:
context: Verschiebe nur FAQ-Beiträge aus der Support-Kategorie in die Dokumentationskategorie
source: 3 # Support-Kategorie-ID
target: 6 # Dokumentationskategorie-ID
withTag: faq
hide: false # Verstecke die Support-Kategorie nicht, wenn sie fertig ist
- movePosts:
context: Konsolidiere die How-To-Kategorie in die Dokumentation mit dem Tag "how-to"
source: 8 # How-To-Kategorie-ID
target: 6 # Dokumentationskategorie-ID
addTag: how-to
hide: true # Verstecke die alte How-To-Kategorie, nur für Administratoren sichtbar
Die Fortschrittsausgabe während der Ausführung könnte dann wie folgt aussehen.
==========
Versteckte Kategorien ausblenden, damit sie die Admin-Ansicht nicht überladen
setHiddenCategory: {:category=>11}
==========
Old Name in New Name umbenennen
describe: {:category=>7, :name=>"New Name", :description=>"New description of category", :slug=>"new-slug"}
==========
nur FAQ-Beiträge aus der Support-Kategorie in die Dokumentationskategorie verschieben
movePosts: {:source=>3, :withTag=>"faq", :target=>6}
==========
Um dies zu verwenden, legen Sie Ihre YAML-Datei in /var/discourse/shared/app/tmp/rearrange.yaml ab und dann:
cd /var/discourse
./launcher enter app
git clone https://github.com/johnsonm/discourse-site-rearranger.git script/discourse-site-rearranger
ruby script/discourse-site-rearranger/rearrange.rb /shared/tmp/rearrange.yaml
Allerdings ist es durchaus wahrscheinlich, dass dieses Skript nicht ganz alles tut, was Sie brauchen. Es ist wirklich ein Framework, das es sehr einfach macht, neue Aktionen einzufügen, die weitere Aspekte einer geskripteten Site-Änderung mit nur wenigen Codezeilen automatisieren. Alles, was Sie tun müssen, ist eine Methode mit ein paar Codezeilen zu definieren, und Sie können sie ordnungsgemäß aus der YAML-Datei aufrufen.
Haben Sie darüber nachgedacht, die Organisation Ihrer Website zu verbessern, aber davor zurückgeschreckt, die Benutzeroberfläche zu verwenden, oder sich gefragt, wie Sie sicher sein können, dass Sie Ihre Tests auf einer Staging-Site replizieren können, um Änderungen live zu schalten? Schauen Sie es sich an und sagen Sie mir, was Sie denken!