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:
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. ![]()
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!