Mover un módulo de Drupal a otro directorio

En algunos casos es necesario tener que mover a otro directorio un módulo ya instalado en el Drupal.

Por poner algunos ejemplos:

  • quieres tener todos los módulos que tienen algún patch aplicado en un directorio separado para facilitar el futuro mantenimiento
  • quieres mover un módulo custom que pusiste por error en el directorio de módulos /contrib  (esto pasa bastante cuando heredas un proyecto que ha hecho otra agencia o freelance)
  • has publicado en drupal.org un modulo que has hecho tu. Esto significa que ahora debería estar en el directorio /contrib y no en el /custom 
  • convertir un Drupal que usa una distribución un un Drupal normal sin distribución
  • .... cualquier caso que te haga mover algún módulo en un sitio donde no estaba antes.

En teoría, y según la documentación, basta con mover el código a su nuevo directorio y luego vaciar las caches.

Pero hay varios problemas a tener en cuenta:

  • Vaciar las caches desde la UI de la web va a ser imposible. La web se rompe al no detectar el módulo. Por lo tanto estas obligado a vaciar las caches desde la linea de comandos. Esto puede ser un problema para webs alojadas en hostings baratos donde no se tiene acceso SSH ni a Drush. Lo que obliga a hacer los cambios en local y resubir la base de datos
  • El Drush del servidor a veces está desactualizado y no elimina todas las caches.

¿Entonces cúal es la forma correcta de hacerlo sin romper el sitio?

Has de mover el módulo a su nuevo directorio, y luego vaciar las caches con alguna de las siguientes formas:

  • Usar "drupal cr" en vez de "drush cr" (es el que mejor me ha funcionado a mi)
  • Usar el drush de dentro de vendor y no el del servidor. "./vendor/bin/drush cr"