मैं अपडेट्स को कैसे फिर से चलाऊं (मॉड्यूल स्कीमा संस्करण बदलें)?


22

मैं एक मॉड्यूल पर काम कर रहा हूं, और मैंने स्कीमा में कुछ फ़ील्ड प्रकार बदल दिए हैं। मैंने इसका परीक्षण करने से पहले बैकअप नहीं लिया और डीबी को गड़बड़ कर दिया (यह सिर्फ एक देव स्थल है)। वैसे भी, मैंने सब कुछ पुनः स्थापित किया, और स्कीमा संस्करण उच्चतम अद्यतन के लिए सेट है। हालाँकि, मुझे वास्तव में अपडेट चलाने की आवश्यकता है; यदि मैं मॉड्यूल कोड में अपडेटेड स्कीमा रखता, तो मैं स्थापित नहीं होता, इसलिए मुझे लगा कि यह उस अद्यतन का परीक्षण करने का एक अच्छा तरीका होगा।

मैं अपने मॉड्यूल के स्कीमा संस्करण को किसी विशेष संस्करण में कैसे रीसेट करूं? Drupal 7 में, मैंने ऐसा किया होगा:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

जवाबों:


47

सीधे राज्य तक पहुंच बनाने के दौरान, आप केवल API का उपयोग कर सकते हैं: drupal_set_installed_schema_version () । जो वास्तव में 4.7 से अपरिवर्तित है, जैसा कि लिंक्ड प्रलेखन पृष्ठ पर दिखाई देता है। संभवतः कुछ एपीआई कार्यों में से एक जो इतने लंबे समय तक अस्तित्व में है;)

इसे ड्रश से सेट करने के लिए:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

नोट: Drupal 7 में आपको अतिरिक्त जोड़ने की आवश्यकता है include 'includes/install.inc';


5
यह भी अच्छा है अगर आपको बस त्वरित जांच करने की आवश्यकता है: ड्रश ईव "गूंज drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

या ड्रश पीएम-इन्फो मोडुलनेम
बीनलुक

10

Drupal 8 अब का उपयोग करता keyvalueस्कीमा संस्करण के बारे में स्टोर जानकारी के लिए सेवा। यह वही एपीआई है जिसे स्टेट एपीआई खुद इस्तेमाल करता है।

डेटाबेस में संग्रहीत होने पर मूल्य जानकारी को क्रमबद्ध किया जाता है, इसलिए प्रत्यक्ष SQL क्वेरी का उपयोग करना उप-इष्टतम है। इसके बजाय, drush php-evalनिम्न का निष्पादन करने के लिए ड्रुप (यदि आपके पास Drush नहीं है, तो बूटस्ट्रैप को स्क्रिप्ट का उपयोग करें, या:)

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

बदलें fillpdfऔर 8102अपने मॉड्यूल का नाम करने के लिए और वांछित स्कीमा संस्करण, क्रमशः।

इस कमांड का Drush फॉर्म है:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

SET और GET मॉड्यूल अपडेट कोड के माध्यम से (Drush के बिना)। नीचे कोड है

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

इसे डेटाबेस में सीधे अपडेट भी कर सकते हैं। यदि आप सीक्वल प्रो (मैक) या जो भी डेटाबेस यूआई टूल विंडो / लाइनक्स जैसे कुछ का उपयोग कर रहे हैं, वह वास्तव में आसान है। यकीनन सबसे अच्छा विचार नहीं है, और उत्पादन स्तर डेटाबेस के खिलाफ ऐसा करने की सलाह नहीं देंगे, लेकिन यह काम पूरा कर देगा!

सारणी = की_वायु

संग्रह = system.schema
नाम = fillpdf (your_module)
मूल्य = मैं अपडेट: 8102;

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