Alguns módulos possuem rotinas de desinstalação. Que normalmente remove as tabelas de dados para esse módulo, variáveis da tabela de variáveis e códigos de idioma introduzidos por esse módulo. Essas rotinas residem no .install
módulo.
Portanto, eles não podem ser executados sem a presença desse módulo. Então, aqui estão nossas etapas atuais. Minha pergunta é: isso pode ser feito de maneira mais simples e eficaz? Digamos que eu remova o módulo foo_bar.
- No RCS, prepare um novo release, onde:
- Todas as substituições de css e temas usadas ou construídas em cima de foo_bar são removidas.
- Todas as substituições de css e tema dos módulos, dependendo de foo_bar, são removidas.
- Empurre esse release para aceitação. Teste a desinstalação (de admin / modules) com uma cópia muito recente do banco de dados de produção.
- Se tudo der certo, implante a nova base de código na produção e desinstale o foo_bar e suas dependências. Isso invocará a desinstalação nos vários módulos, limpando o banco de dados.
- No RCS (git), prepare um novo release em que o código seja realmente removido.
- Implante isso para aceitação, onde testamos se nada dependia acidentalmente disso (alguns módulos ou funções temáticas feios incluem arquivos diretamente de outros módulos. Mais notavelmente CSS, JS ou arquivos de imagem).
- Se aceito, implante um novo release na produção. a produção agora tem um banco de dados limpo e uma base de código limpa .
O problema que não consigo ver como resolver é que isso sempre precisa de dois lançamentos. Como no Drupal, uma versão requer que o site esteja offline, isso significa duas vezes o tempo de inatividade apenas para remover um módulo. Também requer dois procedimentos de liberação que, em ambientes de hospedagem profissional, podem ser muito caros, demorados ou frustrantes.
Se removermos o módulo da base de código na primeira iteração, não poderemos executar os ganchos de desinstalação, mantendo muitos fiapos no banco de dados; não apenas algumas tabelas, mas principalmente variáveis e localidades. Se não removermos o módulo da base de código, isso significa que ela crescerá com código antigo e não utilizado; isso não gera sobrecarga de desempenho, mas torna a manutenção do código cada vez mais difícil.
Como você lida com isso?
[editar: nota adicional sobre a implantação ser um procedimento difícil, geralmente]