Tuve una situación en la que una tabla creada por una función de actualización ( MYMODULE_update_7101
), pero a esa tabla se estaba accediendo en código en algún lugar de cada caché limpia y casi cada llamada borrosa (básicamente obtenía los nombres de tipos de entidad para todos los menús y lo que sea más). Correr drush updatedb
era correr MYMODULE_update_7101
tercero en lugar de primero.
Probé la solución sugerida por @macaleaa y @moshe weitzman de correr:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
antes de correr drush updatedb
, pero esto no ayudó: la carrera drush falló porque updatedb
trató nuevamente de correr MYMODULE_update_7101()
y erró, diciendo que la mesa ya existía. Básicamente, el código anterior había ejecutado la actualización, pero no dejó su marca en el sistema de que la actualización se había ejecutado. Presumiblemente, hay un montón de otras cosas update.php
que hacer después de ejecutar cada actualización para almacenar el último número de versión para el módulo en la base de datos, etc.
Revisé update.php
para ver cómo se ejecuta cada función de actualización y qué hace después, buscando una función para llamar que llame a la función de actualización y también haga todas las demás cosas. Terminé llegando a esto:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Lo que realmente corrí con drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Ejecutó la actualización, no hay problema, pero MYMODULE versión 7101 todavía apareció en la lista de actualizaciones cuando ejecuté updatedb
, aunque se ejecutó sin errores y todo se veía bien en la inspección del sitio.
Un poco hacky y con 6 años de retraso, pero todo está bien y eso termina bien