ड्रश एंटिटी-अपडेट का उद्देश्य क्या है?


14

Drupal 8 मॉड्यूल को अपडेट करने के बाद, मुझे Drupal 8 स्थिति पृष्ठ पर चेतावनी दी गई है:

इकाई / क्षेत्र परिभाषाएँ: इकाई प्रकार और फ़ील्ड परिभाषाओं में निम्नलिखित परिवर्तन पाए गए।

Google द्वारा थोड़ी सी अफवाह के बाद, ऐसा लगता है कि इसका समाधान चलना है drush entity-updates। हालाँकि मुझे यह थोड़ा अजीब लगता है क्योंकि ऐसा लगता है कि यह एक और कमांड है जिसे डेटाबेस को अपडेट करने के बाद किसी के वर्कफ़्लो में याद रखने या शामिल करने की ज़रूरत है, यह उल्लेख नहीं करने के लिए कि यह तत्काल स्पष्ट नहीं था कि मूल चेतावनी को कैसे संबोधित किया जाए।

क्या अधिक है, यह अक्सर ऐसा होता है कि विकास में आपको स्थिति पृष्ठ में अन्य कार्यों के लिए एक चेतावनी होगी, जिसका अर्थ है कि आपको तुरंत पता नहीं चलेगा कि क्या आपको इस पर कार्रवाई करने की आवश्यकता है।

क्या कोई यह बता सकता है कि यह चेतावनी किसके लिए है - या यों कहें कि इस फीचर को D8 में क्यों पेश किया गया है, और इसे डेटाबेस अपडेट ऑपरेशन में क्यों शामिल नहीं किया गया है, लेकिन इसे अलग-अलग चलाया जाना चाहिए?

जवाबों:


19

drush entity-updatesएक डेवलपर उपकरण है। यदि आप अपने कस्टम मॉड्यूल में इकाई / फ़ील्ड परिभाषाएँ बदलते हैं तो आप इसे जल्दी से लागू कर सकते हैं।

उत्पादन में ऐसा नहीं होना चाहिए। यदि आप आधिकारिक रिलीज़ के बीच एक मॉड्यूल को अपडेट करते हैं, तो मॉड्यूल में अपडेट कोड को इसे संभालना चाहिए।

लेकिन आपके मामले में आप उल्लेख कर रहे हैं कि आपकी साइट विकसित हो रही है। इसलिए बहुत सारी चीजें हैं, जो इसका कारण बन सकती थीं। या तो अपने स्वयं के कोड में या कंट्रिब मॉड्यूल के देव या अल्फा संस्करणों में।

मुझे इकाई स्कीमा अपडेट के लिए सीआर लिखें अपडेट फ़ंक्शन से यह उदाहरण मिला , स्वचालन हटा दिया गया (जहां आगे के उदाहरण हैं):

/**
 * Add 'revision_translation_affected' field to 'node' entities.
 */
function node_update_8001() {
  // Install the definition that this field had in
  // \Drupal\node\Entity\Node::baseFieldDefinitions()
  // at the time that this update function was written. If/when code is
  // deployed that changes that definition, the corresponding module must
  // implement an update function that invokes
  // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
  // with the new definition.
  $storage_definition = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Revision translation affected'))
      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
      ->setReadOnly(TRUE)
      ->setRevisionable(TRUE)
      ->setTranslatable(TRUE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('revision_translation_affected', 'node', 'node', $storage_definition);
}

2
सिवाय इसके कि वास्तव में एक बुरा उदाहरण है। यदि आप एक मॉड्यूल हैं, तो आपको बहुत विशिष्ट अपडेट करना चाहिए। एक नई फ़ील्ड परिभाषा स्थापित करें, एक इकाई प्रकार परिभाषा को अपडेट करें। यह बहुत बुरी तरह से जा सकता है यदि आप कई मॉड्यूल अपडेट करते हैं या यदि भविष्य में मॉड्यूल एक और बदलाव करेगा और आप एक पुराने संस्करण से अपडेट करते हैं। node.install में कई बेहतर अपडेट उदाहरण हैं।
बेरदीर

1
प्रारंभ में, यह स्वचालित रूप से updb / update.php के भाग के रूप में किया गया था। लेकिन यह हमेशा काम नहीं करता है, यह संभवतः विनाशकारी अपडेट का समर्थन नहीं करता है जब डेटा होता है और इससे बहुत सारी समस्याएं होती हैं। यदि आपके पास किसी फ़ील्ड में डेटा है, तो आप इस पद्धति को कॉल नहीं कर सकते, आपको इसे स्वयं अपडेट करने की आवश्यकता है, जो काफी जटिल हो सकता है। अधिक जानकारी के लिए drupal.org/node/2554097 देखें
बर्दिर

2
बर्दिर की टिप्पणी के बारे में ध्यान दें: मैंने खराब उदाहरण को हटा दिया है और इसे परिवर्तन रिकॉर्ड से एक के साथ बदल दिया है।
एंडी

2
बस स्पष्ट होने के लिए, उत्पादन में इकाई-अद्यतनों को चलाने के लिए यह एक बुरा विचार है कि यह विनाशकारी हो सकता है। उदाहरण के लिए, यदि आप किसी फ़ील्ड संग्रहण को बदलते हैं, तो परिवर्तित स्टोरेज परिभाषा को आयात करें, क्रोन चलाएँ, और फिर इकाई-अद्यतन चलाएँ, यह उस फ़ील्ड में मौजूद किसी भी मौजूदा सामग्री को नष्ट कर देगा।
डेन पॉवेल

2
मॉड्यूल को लक्षित अपडेट हुक के माध्यम से अपने स्वयं के स्कीमा अपडेट को लागू करने के लिए जिम्मेदार होना चाहिए। किसी को भी entity-updatesनियमित आधार पर कमांड नहीं चलाना चाहिए , कस्टम मॉड्यूल वाली साइटों की विकास प्रक्रिया में जल्दी को छोड़कर जहां आप डेटा विनाश की परवाह नहीं करते हैं।
डेन पॉवेल

1

कमांड "ड्रश एंटिटी-अपडेट्स" को v 8.7.0 से हटा दिया गया है

Https://www.drupal.org/node/3034742 देखें

8.7.0 से शुरू होकर, ड्रुपल कोर अब स्वचालित इकाई अपडेट के लिए समर्थन प्रदान नहीं करता है। जब भी एक इकाई प्रकार या फ़ील्ड स्टोरेज परिभाषा को अपडेट एपीआई द्वारा प्रदान की गई, और इकाई परिभाषा अद्यतन प्रबंधक द्वारा प्रदान की गई एपीआई का उपयोग करके स्पष्ट अपडेट फ़ंक्शन के साथ बनाना, बदलना या हटाना पड़ता है।

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