मेरे पास एक ऐसी स्थिति थी जिसमें एक अद्यतन फ़ंक्शन ( 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, ALTHOUGH यह बिना किसी गलतफहमी के भाग गया और साइट के निरीक्षण पर सब कुछ अच्छा लग रहा था।
थोड़ा हैकी और 6 साल देर से, लेकिन सब कुछ ठीक हो गया है?