Para escribir un script que reorganice un Discourse grande trabajando con el liderazgo de mi sitio, escribí un framework simple para empaquetar un montón de pequeños scripts de Ruby que se controlan desde un archivo de configuración YAML. De esta manera, puedo restaurar una copia de seguridad en un sitio de staging, ejecutar mi script, obtener comentarios, cambiar algunas líneas de YAML, restaurar la copia de seguridad, ejecutar el script con la nueva configuración y repetir hasta estar satisfecho.
Tengo casi 600 líneas de configuración para mi sitio, y hacerlo manualmente a través de la UI simplemente no sería posible. Ni una sola vez, y mucho menos muchas veces para hacerlo bien. Lo sé porque la última vez que propuse hacer cambios drásticos, literalmente me di por vencido intentándolo. Por el contrario, con este script ahora puedo completar todo el ciclo en solo unos minutos por iteración, aunque el sitio tenga alrededor de medio millón de publicaciones y más de 100 categorías. Esto me permite obtener comentarios rápidos de los líderes de mi sitio y estaré preparado para migrar mi sitio rápidamente.
La documentación más detallada se encuentra en el archivo README en el repositorio con el código:
Este script no realiza ninguna comprobación de errores. Es una locura ejecutarlo en tu sitio en vivo. Está diseñado para ejecutarse en un sitio de staging, validar el resultado y luego pasarlo a producción. Como autor, todavía pretendo ejecutarlo de esta manera. Si lo ejecutas directamente en un sitio en vivo, te quedarás con todas las piezas cuando se rompa. ![]()
Según la documentación, un archivo de configuración podría verse así:
---
- 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
La salida del progreso mientras se ejecuta podría verse así.
==========
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}
==========
Para usar esto, coloca tu archivo YAML en /var/discourse/shared/app/tmp/rearrange.yaml y luego:
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
Sin embargo, es razonablemente probable que este script no haga exactamente todo lo que necesitas. Es realmente un framework que hace muy fácil añadir nuevas acciones que automaticen más aspectos de una modificación de sitio con script con solo unas pocas líneas de código. Todo lo que necesitas hacer es definir un método con unas pocas líneas de código, y podrás invocarlo correctamente desde el archivo YAML.
¿Has estado pensando en mejorar la organización de tu sitio, pero te echas atrás al usar la UI, o te preguntas cómo confiar en que podrás replicar tus pruebas en un sitio de staging para hacer cambios en vivo? ¡Échale un vistazo y dime qué piensas!