Ho avuto una situazione in cui una tabella creata da una funzione di aggiornamento ( MYMODULE_update_7101
), ma a quella tabella si accedeva nel codice da qualche parte in ogni cache libera e in quasi ogni chiamata drush (stava praticamente ottenendo i nomi dei tipi di entità per tutti i menu e qualunque cosa altro). La corsa drush updatedb
era MYMODULE_update_7101
terza invece che prima.
Ho provato la soluzione suggerita da @macaleaa e @moshe weitzman di correre:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
prima di essere eseguito drush updatedb
, ma questo non ha aiutato: l'esecuzione del drush ha avuto esito negativo perché ha updatedb
tentato di eseguire nuovamente MYMODULE_update_7101()
ed è stata eliminata, dicendo che la tabella esisteva già. Fondamentalmente, il codice sopra aveva eseguito l'aggiornamento, ma non ha lasciato il segno sul sistema che l'aggiornamento era stato eseguito. Presumibilmente c'è un sacco di altre cose update.php
da fare dopo aver eseguito ogni aggiornamento per memorizzare l'ultimo numero di versione per il modulo nel database, ecc.
Ho update.php
esaminato come esegue effettivamente ogni funzione di aggiornamento e cosa fa dopo, cercando una funzione da chiamare che chiamasse la funzione di aggiornamento e facesse anche tutte le altre cose. Ho finito per arrivare a questo:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Che ho effettivamente eseguito con Drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Ha eseguito l'aggiornamento, nessun problema, ma poi MYMODULE versione 7101 è ancora apparso nell'elenco degli aggiornamenti quando ho eseguito updatedb
, ANCHE se funzionava senza errori e tutto sembrava buono all'ispezione del sito.
Un po 'confuso e in ritardo di 6 anni, ma va tutto bene che finisce bene?