Framework di script per riorganizzare argomenti e categorie

Per poter creare script per riorganizzare un grande Discourse lavorando con la leadership del mio sito, ho scritto un semplice framework per impacchettare un gruppo di scriptlet Ruby che vengono gestiti da un file di configurazione YAML. In questo modo, posso ripristinare un backup su un sito di staging, eseguire il mio script, ricevere feedback, modificare alcune righe di YAML, ripristinare il backup, eseguire lo script con la nuova configurazione e ripetere finché non sono soddisfatto.

Ho quasi 600 righe di configurazione per il mio sito, e farlo con la manipolazione manuale tramite l’interfaccia utente non sarebbe possibile. Nemmeno una volta, tanto meno molte volte per farlo bene. Lo so perché l’ultima volta che ho proposto di apportare modifiche radicali, ho letteralmente rinunciato a provarci. Al contrario, con questo script ora posso completare l’intero ciclo in pochi minuti per iterazione, anche se il sito ha circa mezzo milione di post e oltre 100 categorie. Questo mi consente di ottenere un feedback rapido dalla leadership del mio sito e sarò pronto a migrare il mio sito rapidamente.

La documentazione più dettagliata si trova nel file README nel repository con il codice:

:warning: Questo script non esegue alcun controllo degli errori. È piuttosto folle eseguirlo sul tuo sito live. È inteso per essere eseguito su un sito di staging, validare il risultato e poi essere reso live. Come autore, ho ancora intenzione di eseguirlo in questo modo. Se lo esegui direttamente su un sito live, dovrai tenere tutti i pezzi quando si rompe. :warning:

Dalla documentazione, un file di configurazione potrebbe apparire così:

---
- describe:
    context: Old Name
    category: 7
    name: New Name
    description: New description of category
    slug: new-slug
- movePosts:
    context: move only faq posts from the Support category to the Documentation category
    source: 3 # Support category ID
    target: 6 # Documentation category ID
    withTag: faq
    hide: false # do not hide the Support category when done
- movePosts:
    context: consolidate How-To category into documentation with how-to tag
    source: 8 # How-To category ID
    target: 6 # Documentation category ID
    addTag: how-to
    hide: true # hide the old How-To category, visible only to Admin

L’output di avanzamento durante l’esecuzione potrebbe quindi apparire così.

==========
Move hidden categories out of the way so they don't clutter admin view
setHiddenCategory: {:category=>11}
==========
Rename Old Name to New Name
describe: {:category=>7, :name=>"New Name", :description=>"New description of category", :slug=>"new-slug"}
==========
move only faq posts from the Support category to the Documentation category
movePosts: {:source=>3, :withTag=>"faq", :target=>6}
==========

Per utilizzarlo, metti il tuo file YAML in /var/discourse/shared/app/tmp/rearrange.yaml e poi:

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

Tuttavia, è ragionevolmente probabile che questo script non faccia esattamente tutto ciò di cui hai bisogno. È davvero un framework che rende molto facile aggiungere nuove azioni che automatizzano ulteriormente gli aspetti di una modifica scriptata del sito con poche righe di codice. Tutto ciò che devi fare è definire un metodo con poche righe di codice, e sarai in grado di invocarlo correttamente dal file YAML.

Hai pensato a migliorare l’organizzazione del tuo sito, ma hai evitato di usare l’interfaccia utente, o ti sei chiesto come fidarti del fatto che sarai in grado di replicare i tuoi test su un sito di staging per apportare modifiche live? Dai un’occhiata e dimmi cosa ne pensi!

5 Mi Piace

Sto usando questo script per creare un sito di test, come clone del mio sito principale. L’alta fedeltà visiva è parte del punto, ma potrebbe rendere facile pubblicare accidentalmente sul sito sbagliato durante la revisione delle modifiche, e far sì che tali post accidentali vengano eliminati la prossima volta che ricarico il sito di test.

Ho prima reso il mio sito di test di sola lettura quando ho chiesto un feedback pubblico. Ma l’accesso è disabilitato mentre il sito è in modalità di sola lettura, quindi non potevano accedere quando ho chiesto loro di farlo.

Ho aggiunto una nuova azione publicCategoriesReadonly che rende le categorie visibili anonimamente scrivibili solo da :admins e :readonly da :everyone al fine di consentire alle persone di accedere ed esplorare, ma aiutare a evitare di pubblicare accidentalmente sul sito sbagliato. Ora il sito nel suo complesso non è in modalità di sola lettura, ma le categorie pubbliche lo sono.

È possibile fare riferimento alle categorie come hashtag tramite slug. Questo script consente di spostare i contenuti delle categorie insieme e di modificare gli slug, il che renderebbe i post precedenti non più collegabili dopo un rebake. (Prima di un rebake, i reindirizzamenti dei permalink avrebbero fatto funzionare i link.)

Ho ora aggiornato lo script per tenere traccia dei tag prima e dopo la migrazione e rimappare i riferimenti alle categorie modificate nei post.

Ho aggiunto un’azione migrateRetortToReactions al framework per coloro che hanno installato Retort e desiderano passare a un plugin supportato.

2 Mi Piace

Wow! Ottime notizie. Sarebbe fantastico se qualcuno potesse trasformarlo in un rake task e inviarlo al plugin delle reazioni.

Ci darò un’occhiata presto.

1 Mi Piace

Avere un task rake nel plugin mi sembra una buona idea.

Ho firmato il CLA di CDCK, quindi qualsiasi interesse di copyright da parte mia nell’opera risultante non sarà d’intralcio e potrà essere inserito sotto la stessa licenza del plugin stesso.

Inoltre, potrei aver sbagliato qualcosa; se trovi qualcosa di sbagliato, mi piacerebbe saperlo perché ho intenzione di eseguire quello script sul mio sito tra qualche settimana. :smiley:

Su scala più ampia, se trovi questo framework utile per il tuo lavoro di supporto alle installazioni di Discourse ma desideri una maggiore gestione degli errori, accetterei PR. Voglio solo assicurarmi che qualsiasi PR provenga da qualcuno che ha firmato il CLA e concorda che qualsiasi pezzo utile di esso possa essere incorporato in Discourse ufficiale, cosa che so essere vera per te…

2 Mi Piace

Ho scoperto nell’argomento Retort che @angus ha un branch con conversione guidata dall’interfaccia utente, che mi era completamente sfuggito.

Il mio script approfondisce gli interni che potrebbero cambiare un giorno, e una volta che avrò fatto le mie conversioni con questo script non noterò se questi interni cambiano. Ho prima provato a farlo “nel modo giusto” ma ho scoperto che il plugin Reactions non espone un’interfaccia che lo consenta. @angus ha una visione a lungo termine:

@pfaffman se crei un rake task, potresti volerlo inserire in una PR che apporti anche le modifiche alle interfacce in modo che, ad esempio, created_by possa essere passato, oltre a silent, piuttosto che utilizzare la “porta sul retro” che ho usato. A quel punto, il rake task sarebbe disponibile per le migrazioni da riga di comando e contemporaneamente sbloccherebbe @angus per eseguire una migrazione guidata dall’interfaccia utente.