एक मॉड्यूल के लिए ड्रश अपडेटेड


28

क्या ड्रम के माध्यम से एकल मॉड्यूल अपडेट फ़ंक्शन करना संभव है? मैं देख सकता drush updatedbहूं कि तर्क के रूप में एक मॉड्यूल नहीं लेता है और सभी उपलब्ध अपडेट चलाता है। फिर वहाँ drush pm-updateभी नई फ़ाइलों के लिए जाँच है। प्रलेखन कहते हैं:

(pm-updatecode + updatedb के समान)

क्या इसका मतलब यह है कि अगर मैं drush pm-updateहर उपलब्ध (नया update_function बाहर निकलता हूं) अद्यतन पूर्ण हो जाएगा? वहाँ केवल (डीबी) अद्यतन करने के लिए एक ही तरह से एक मॉड्यूल है?


मुझे पता है कि यह सवाल काफी पुराना है, लेकिन मैं उत्सुक हूं: आप ऐसा क्यों चाहेंगे? आम तौर पर, सभी कोड इस धारणा पर आधारित होते हैं कि डीबी अप-टू-डेट है। यदि आप नहीं चाहते हैं कि किसी विशिष्ट मॉड्यूल का db अपडेट चले, तो क्या आपको पूरे मॉड्यूल को पुराने संस्करण में वापस नहीं लाना चाहिए?
marvvangend

1
एक साल बाद। मुझे निम्न के लिए इसकी आवश्यकता थी: मैंने एक कस्टम मॉड्यूल बनाया है, लेकिन टेबल लेआउट को बाद में (अभी भी विकास के चरण में) बदल दिया है, इसलिए यह सिर्फ नए स्कीमा के साथ db को अपडेट करने के लिए आसान होगा।
मार्टन हार्टमैन

जवाबों:


10

नहीं, आप नहीं कर सकते।

यदि आप प्रत्येक मॉड्यूल को अपने आप अपडेट करना चाहते हैं, तो केवल एकल मॉड्यूल की फ़ाइलों को अपडेट करें और फिर अपडेटेड रन करें।


उपयोग करने के बारे में नीचे टिप्पणी देखें drush dl(आप शायद पुराने मॉड्यूल को हटाना चाहते हैं ताकि आप पुराने संस्करणों को नए संस्करण के लिए अभिप्रेत न रखें!)
doublejosh

क्या ड्रश के बाहर ऐसा करने का कोई तरीका है?
lathomas64

2
@ahimsauzi सही जवाब दिया
cybercampbell

21

Drush 5.7 पर आप कमांड चला सकते हैं drush pm-update --no-core module-name। ड्रश स्वचालित रूप से वर्तमान मॉड्यूल का बैकअप लेगा, नया संस्करण डाउनलोड करेगा और आपको डेटाबेस अपडेट करने के लिए संकेत देगा।


6
सभी लंबित अपडेट चलाएंगे, न कि केवल आपके द्वारा अपडेट किए गए मॉड्यूल से।
मोशे वेत्ज़मैन 18

मोशे, स्पष्ट कर सकते हैं? मैं उपरोक्त कमांड चला रहा हूं और हालांकि ड्रश सभी लंबित अपडेट की जांच करेगा, केवल निर्दिष्ट मॉड्यूल (ऊपर दिए गए मॉड्यूल-नाम) को अपडेट किया जाएगा। क्या मैं कुछ भूल रहा हूँ?
अहिंसासुई

6
यह सभी लंबित कोड अपडेट की जांच करता है और केवल निर्दिष्ट मॉड्यूल के लिए कोड को अपडेट करता है, लेकिन यह सभी डेटाबेस अपडेट को संसाधित करेगा ।
meustrus

8

यदि आप केवल एक अपडेट चलाना चाहते हैं, तो आप drush eval foo_update_33()उदाहरण के लिए चला सकते हैं । व्यवहार में, यह उस से थोड़ा अधिक जटिल है क्योंकि आपको फ़ाइल को स्थापित करना है लेकिन बहुत अधिक नहीं।

आप @macaleaa समाधान भी आज़मा सकते हैं:

drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'


3
मैं जोड़ूंगा कि यह बहुत अच्छा होगा यदि कोई ड्रश के लिए ए कॉन्ट्रिब एक्सटेंशन करता है जो आपको चयनित अपडेट चलाने देता है। यह सामान्य रूप से करने के लिए एक सुरक्षित चीज नहीं है, लेकिन कभी-कभी आप खतरनाक तरीके से रहते हैं। हालांकि, मैं कोर ड्रश के लिए उपयुक्त नहीं हूं (मैं ड्रश मेंटेनर हूं)
मोशे

2
कोर ड्रश के लिए उपयुक्त क्यों नहीं? क्या यह संभव नहीं है कि कोई व्यक्ति डेटाबेस अपडेट के एक विशेष क्रम (पहले से डाउनलोड किए गए कोड के लिए) को लागू करना चाहेगा , इस स्थिति में प्रत्येक व्यक्तिगत मॉड्यूल को अलग से अपडेट करने की आवश्यकता होगी? मैं खुद ऐसी स्थिति में हूं।
मेसट्रस

33 कहाँ से आ रहा है? मॉड्यूल की मशीन का नाम क्या है?
लथोमास 64

33 अद्यतन फ़ंक्शन नाम का हिस्सा है और आदेश को निर्धारित करता है। और हाँ, फू मॉड्यूल का मशीन नाम है। आप कार्यों को foo.install में पा सकते हैं। उदाहरण के लिए, devel मॉड्यूल (devel.install में) के कई अद्यतन कार्य हैं: function devel_update_7000सबसे कम संख्या वाला एक है, और पहले निष्पादित किया जाएगा, फिर function devel_update_7001, आदि
Ursula

3
यहां एक उदाहरण दिया गया है जो पहले इंस्टॉल की गई फ़ाइल को लोड करता है:drush php-eval 'module_load_install('file_entity');file_entity_update_7211();'
mcaleaa

5

न तो drush up someproject, और न ही drush upc someprojectकेवल someprojectमॉड्यूल को अद्यतन करने के लिए प्रतीत होता है । एक अलग तरीका है कि आप क्या चाहते हैं:

drush dl someproject #use --select option to be prompted for a module version
                     #this will overwrite your exising module's files
                     #backup your modules files with --backup, yourself, use a VCS to revert
drush updb           #run available database update scripts

यहाँ Drupal.org पर इसी तरह के विषय पर चर्चा की गई है। ध्यान रखें !


मैंने बस कोशिश की, और drush up someprojectकाम करता है, लेकिन दुर्भाग्य से यह सक्षम मॉड्यूल के लिए सभी उपलब्ध अपडेट को डिफ़ॉल्ट रूप से भी जांचता है (जिसकी आवश्यकता नहीं होगी), उनमें से कुछ के लिए "अपडेट उपलब्ध है" लिखता है, लेकिन केवल विशिष्ट परियोजना को अपडेट करता है। यहाँ एक स्क्रीनशॉट है: i.imgur.com/TDDmB.png । जैसा कि आप देख सकते हैं, कई अपडेट उपलब्ध हैं, लेकिन केवल xmlsitemap का उपयोग करके अपडेट किया जाता है drush up xmlsitemap
Sk8erPeter

4

मैं Drush 5.9 का उपयोग कर रहा हूं, और इस आदेश के साथ एक एकल मॉड्यूल को सफलतापूर्वक अपडेट कर सकता हूं:

drush dl *project*

इसलिए, उदाहरण के लिए, 'devel' मॉड्यूल को अद्यतन करने के लिए:

drush up devel

1

मेरा मानना है कि इस Drush, उपयोग करने के साथ अब संभव है up:

drush up module_name

0

मेरे पास एक ऐसी स्थिति थी जिसमें एक अद्यतन फ़ंक्शन ( 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 साल देर से, लेकिन सब कुछ ठीक हो गया है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.