Percebi que, para personalização de design, recomenda-se o uso de Temas em vez de Plugins. Quais são as vantagens?
Do ponto de vista do desenvolvimento, vejo os Temas como muito complicados. Preciso de mais uma ferramenta para poder ver as alterações de código em tempo real — console do CLI do Tema.
Também entendo que os Temas podem ser selecionáveis pelo usuário (mas não preciso dessa funcionalidade).
Quais são as vantagens dos Temas em relação aos Plugins em produção?
Portanto, se você não precisar criar rotas, modificar serializadores ou armazenar dados personalizados, provavelmente conseguirá alcançar seu objetivo apenas com um tema.
O maior desafio que vemos com plugins personalizados, do ponto de vista de suporte, são as quedas do site. Isso geralmente ocorre porque o plugin faz patch em uma classe ou método do Rails no núcleo que foi alterado e o plugin ainda não foi atualizado para lidar com isso. Se algo mudar no lado do Ember e, consequentemente, quebrar o tema ou um componente do tema, o site pode não ser renderizado corretamente, mas pode ser desativado rapidamente usando /safe-mode.
Entendo seu ponto aqui. Também diria que o gem permite que você desenvolva seu tema localmente e o sincronize com qualquer site Discourse para o qual você tenha uma chave de API, incluindo theme-creator.discourse.org. Você nem precisa configurar um ambiente de desenvolvimento local se tiver esse único gem em execução.
Uau, as respostas aqui são ouro! Tenho muito pouco a acrescentar.
A única coisa que acho importante mencionar é que, internamente no Discourse, estamos avançando para separar alguns plugins agora em “plugin para backend” e “tema para frontend”. Estamos refletindo sobre esse desafio de “distribuição” quando as coisas estão misturadas assim.
No geral, minha recomendação extremamente forte é recorrer à criação de plugins apenas se você realmente precisar deles. Quando é necessário modificar o backend em Ruby, não há alternativa. Um plugin que faz alterações apenas no frontend é fortemente desencorajado. É mais difícil mantê-lo atualizado e muito menos flexível em termos de uso.