Некоторые модули имеют процедуры деинсталляции. Которые обычно удаляют таблицы базы данных для этого модуля, переменные из таблицы переменных и локали, представленные этим модулем. Эти процедуры живут в этом .install
модуле.
Следовательно, они не могут быть запущены без присутствия этого модуля. Итак, вот наши текущие шаги. У меня вопрос: можно ли сделать это проще и эффективнее? Скажем, я удаляю модуль foo_bar.
- В RCS подготовьте новый выпуск, где:
- Все переопределения css и theme, которые используют или строят поверх foo_bar, удаляются.
- Все CSS и переопределения тем для модулей в зависимости от foo_bar удаляются.
- Нажмите этот релиз для принятия. Протестируйте деинсталляцию (от admin / modules) с самой последней копией производственной базы данных.
- Если все идет хорошо, разверните новую кодовую базу в производство и деинсталлируйте foo_bar и его зависимости там. Это вызовет деинсталляцию в различных модулях, очистку базы данных.
- В RCS (git) подготовьте новый выпуск, в котором код фактически удален.
- Разверните его для принятия, где мы тестируем, если от этого ничего не зависит случайно (некоторые уродливые модули или функции темы включают файлы непосредственно из других модулей. Наиболее значимыми являются CSS, JS или файлы изображений).
- Если принято, разверните новый выпуск в производство. У продукции теперь есть чистая база данных и чистая кодовая база .
Проблема, которую я не вижу, как решить, состоит в том, что это всегда требует двух выпусков. Так как в Drupal релиз требует, чтобы сайт был в автономном режиме, это означает два раза простоя только для удаления одного модуля. Это также требует двух процедур выпуска, которые в профессиональных средах хостинга могут быть очень дорогими, трудоемкими или разочаровывающими.
Если мы удалим модуль из кодовой базы в первой итерации, мы не сможем запустить ловушки удаления, сохраняя много ворса в базе данных; не только несколько таблиц, но в основном переменные и локали. Если мы не удаляем модуль из кодовой базы, это означает, что кодовая база будет расти с устаревшим, неиспользуемым кодом; это не приводит к снижению производительности, но усложняет поддержание кода.
Как вы справляетесь с этим?
[edit: добавлено примечание о том, что развертывание является сложной процедурой, часто]