ฉันมีสถานการณ์ที่ตารางที่สร้างขึ้นโดยฟังก์ชั่นการอัพเดท ( 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
ต้องทำหลังจากเรียกใช้การอัปเดตแต่ละครั้งเพื่อเก็บหมายเลขเวอร์ชั่นล่าสุดสำหรับโมดูลในฐานข้อมูลเป็นต้น
ฉันผ่านupdate.php
ไปเพื่อดูว่ามันใช้งานจริงสำหรับแต่ละฟังก์ชั่นการอัพเดทอย่างไรและมันทำงานอย่างไรโดยมองหาฟังก์ชั่นการโทรที่จะเรียกฟังก์ชั่นการอัพเดทและทำสิ่งอื่น ๆ ทั้งหมด ฉันได้รับสิ่งนี้:
include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);
ซึ่งฉันจริง ๆ แล้ววิ่งด้วย drush:
drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'
มันรันการอัปเดตไม่มีปัญหา แต่แล้ว MYMODULE รุ่น 7101 ยังคงปรากฏอยู่ในรายการอัปเดตเมื่อฉันวิ่งupdatedb
แต่มันวิ่งโดยไม่มีข้อผิดพลาดและทุกอย่างดูดีในการตรวจสอบเว็บไซต์
บิตแฮ็คและ 6 ปีที่ผ่านมา แต่ทุกอย่างก็จบลงด้วยดี?