Miałem sytuację, w której tabela utworzona przez funkcję aktualizacji ( MYMODULE_update_7101
), ale do tej tabeli dostęp był gdzieś w kodzie w każdej pamięci podręcznej wyczyszczonej i prawie przy każdym wywołaniu drush (w zasadzie otrzymywał nazwy typów jednostek dla wszystkich menu i cokolwiek innego) jeszcze). Bieganie drush updatedb
działało MYMODULE_update_7101
trzecie zamiast pierwszego.
Wypróbowałem rozwiązanie sugerowane przez @macaleaa i @moshe weitzman dotyczące uruchamiania:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
przed uruchomieniem drush updatedb
, ale to nie pomogło - uruchomienie drush nie powiodło się, ponieważ updatedb
próbowałem ponownie uruchomić MYMODULE_update_7101()
i zignorowałem, mówiąc, że tabela już istnieje. Zasadniczo powyższy kod uruchomił aktualizację, ale nie pozostawił znaku w systemie, że aktualizacja została uruchomiona. Przypuszczalnie istnieje wiele innych rzeczy, update.php
które trzeba zrobić po uruchomieniu każdej aktualizacji, aby zapisać najnowszy numer wersji modułu w db itp.
Przeszedłem, update.php
aby zobaczyć, jak faktycznie działa każda funkcja aktualizacji i co robi później, szukając funkcji do wywołania, która wywołałaby funkcję aktualizacji, a także wykonała wszystkie inne czynności. Skończyło się na tym, że:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Które faktycznie prowadziłem z drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Uruchomiłem aktualizację, nie ma problemu, ale wtedy wersja 7101 MYMODULE wciąż pojawiała się na liście aktualizacji, kiedy uruchomiłem updatedb
, mimo że działała bez błędów i wszystko wyglądało dobrze podczas inspekcji witryny.
Trochę zuchwały i spóźniony o 6 lat, ale czy wszystko dobrze się kończy?