У мене виникла ситуація, коли таблиця, створена функцією оновлення ( MYMODULE_update_7101
), але до цієї таблиці входила в код десь у кожному кеш-пам’яті і майже при кожному виклику друку (це в основному отримання назв типів сутності для всіх меню і будь-якого іншого інше). Біг drush updatedb
бігав MYMODULE_update_7101
третім замість першого.
Я спробував рішення, запропоновані @macaleaa та @moshe weitzman, що працює:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
перед запуском drush updatedb
, але це не допомогло - пробіг барабану не вдався, оскільки updatedb
спробував знову запуститись MYMODULE_update_7101()
і помилився, сказавши, що стіл вже існує. В основному, вищевказаний код запустив оновлення, але не залишив свій слід у системі, що оновлення було запущено. Імовірно, що update.php
після запуску кожного оновлення існує ціла купа інших речей, щоб зберегти номер останньої версії модуля в db тощо.
Я update.php
переглянув, як вона насправді виконує кожну функцію оновлення і що вона робить після, шукаючи функцію для виклику, яка викликала б функцію оновлення, а також виконувати всі інші речі. Я в кінцевому підсумку дійшов до цього:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Який я насправді біг із барабаном:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Він запустив оновлення, ніяких проблем, але потім MYMODULE версії 7101 все ще з'явився у списку оновлень, коли я запустив updatedb
, ТАКОЖ він запускався, не помиляючись, і все виглядало добре при огляді сайту.
Трохи хакіт і 6 років пізно, але все добре, що закінчується добре?