Para criar scripts para reorganizar um Discourse grande em colaboração com a liderança do meu site, escrevi um framework simples para empacotar um monte de pequenos scripts Ruby que seriam controlados por um arquivo de configuração YAML. Dessa forma, posso restaurar um backup em um site de staging, executar meu script, obter feedback, alterar algumas linhas do YAML, restaurar o backup, executar o script com a nova configuração e repetir até ficar satisfeito.
Tenho quase 600 linhas de configuração para o meu site, e fazer isso por manipulação manual através da UI simplesmente não aconteceria. Nem uma vez, muito menos várias vezes para acertar. Sei disso porque da última vez que propus fazer mudanças drásticas, desisti literalmente de tentar. Em contraste, com este script, agora posso completar todo o ciclo em apenas alguns minutos por iteração, mesmo que o site tenha cerca de meio milhão de posts e mais de 100 categorias. Isso me permite obter feedback rápido da liderança do meu site e estarei preparado para migrar meu site rapidamente.
Documentação mais detalhada está no arquivo README no repositório com o código:
Este script não faz verificação de erros. É bastante insano executá-lo no seu site ao vivo. Ele se destina a ser executado em um site de staging, validar o resultado e, em seguida, ser levado para o ar. Como autor, ainda pretendo executá-lo dessa forma. Se você executá-lo diretamente em um site ao vivo, você ficará com todos os pedaços quando ele quebrar. ![]()
Da documentação, um arquivo de configuração pode parecer com isto:
---
- 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
A saída de progresso enquanto ele está em execução pode então parecer com isto.
==========
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 isto, coloque o seu arquivo YAML em /var/discourse/shared/app/tmp/rearrange.yaml e, em seguida:
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
No entanto, é razoavelmente provável que este script não faça exatamente tudo o que você precisa. É realmente um framework que torna muito fácil adicionar novas ações que automatizam mais aspectos de uma modificação de site com script com apenas algumas linhas de código. Tudo o que você precisa fazer é definir um método com algumas linhas de código, e você será capaz de invocá-lo corretamente a partir do arquivo YAML.
Você tem pensado em melhorar a organização do seu site, mas hesitando em usar a UI, ou se perguntando como confiar que você será capaz de replicar seus testes em um site de staging para tornar as alterações ao vivo? Dê uma olhada e me diga o que você acha!