Saya memiliki situasi di mana tabel dibuat oleh fungsi pembaruan ( MYMODULE_update_7101
), tetapi tabel itu sedang diakses dalam kode di suatu tempat di setiap cache jelas dan hampir setiap panggilan drush (itu pada dasarnya mendapatkan nama tipe entitas untuk semua menu dan apa pun lain). Berlari lebih cepat dari drush updatedb
yang MYMODULE_update_7101
ketiga.
Saya mencoba solusi yang disarankan oleh @macaleaa dan @moshe weitzman untuk menjalankan:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
sebelum berjalan drush updatedb
, tetapi ini tidak membantu - menjalankan drush gagal karenaupdatedb
mencoba lagi untuk menjalankan MYMODULE_update_7101()
dan kesalahan, mengatakan meja sudah ada. Pada dasarnya, kode di atas telah menjalankan pembaruan, tetapi tidak meninggalkan bekas pada sistem bahwa pembaruan telah dijalankan. Agaknya ada banyak hal lain yang update.php
harus dilakukan setelah menjalankan setiap pembaruan untuk menyimpan nomor versi terbaru untuk modul di db, dll.
Saya pergi update.php
untuk melihat bagaimana sebenarnya menjalankan setiap fungsi pembaruan dan apa yang dilakukan setelahnya, mencari fungsi untuk memanggil yang akan memanggil fungsi pembaruan dan juga melakukan semua hal lainnya. Saya akhirnya sampai pada ini:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
Yang sebenarnya saya jalankan dengan drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
Itu menjalankan pembaruan, tidak ada masalah, tetapi kemudian versi MYMODULE 7101 masih muncul di daftar pembaruan ketika saya berlari updatedb
, MESKIPUN itu berjalan tanpa kesalahan dan semuanya tampak bagus saat memeriksa situs.
Agak macet dan terlambat 6 tahun, tapi semua baik-baik saja itu berakhir dengan baik?