Algunos módulos tienen rutinas de desinstalación. Que normalmente eliminan las tablas de base de datos para ese módulo, las variables de la tabla de variables y las configuraciones regionales introducidas por ese módulo. Estas rutinas viven en el .install
de ese módulo.
Por lo tanto, no se pueden ejecutar sin ese módulo presente. Así que aquí están nuestros pasos actuales. Mi pregunta es: ¿se puede hacer esto de manera más simple y efectiva? Digamos que elimino el módulo foo_bar.
- En el RCS, prepare una nueva versión, donde:
- Se eliminan todas las sustituciones de css y de temas que usan o se crean sobre foo_bar.
- Se eliminan todas las sustituciones de css y temas para los módulos que dependen de foo_bar.
- Empuje ese lanzamiento a la aceptación. Pruebe la desinstalación (desde admin / modules) con una copia muy reciente de la base de datos de producción.
- Si todo va bien, implemente la nueva base de código en producción y desinstale foo_bar y sus dependencias allí. Esto invocará la desinstalación en los distintos módulos, limpiando la base de datos.
- En el RCS (git), prepare una nueva versión donde el código se elimine realmente.
- Implemente eso en la aceptación donde probamos si nada dependía accidentalmente de esto (algunos módulos feos o funciones temáticas incluyen archivos directamente de otros módulos. En particular CSS, JS o archivos de imagen).
- Si se acepta, implemente una nueva versión en producción. La producción ahora tiene una base de datos limpia y una base de código limpia .
El problema que no puedo ver cómo resolver es que esto siempre necesita dos versiones. Dado que en Drupal una versión requiere que el sitio esté fuera de línea, esto significa dos veces el tiempo de inactividad solo para eliminar un módulo. También requiere dos procedimientos de lanzamiento, que, en entornos de alojamiento profesional, pueden ser muy costosos, lentos o frustrantes.
Si eliminamos el módulo de la base de código en la primera iteración, no podemos ejecutar los ganchos de desinstalación, manteniendo muchas pelusas en la base de datos; no solo unas pocas tablas, sino principalmente variables y configuraciones regionales. Si no eliminamos el módulo de la base de código, eso significa que la base de código crecerá con código obsoleto y no utilizado; esto no genera una sobrecarga de rendimiento, pero hace que el mantenimiento del código sea cada vez más difícil.
Como tratas con esto?
[editar: nota agregada sobre la implementación como un procedimiento difícil, a menudo]