मैं एक सामग्री से एक उत्पादन साइट पर ब्लॉक सामग्री को कैसे स्थानांतरित करूं?


24

मैंने अंततः ड्रुपल 8 को गंभीरता से देखना शुरू कर दिया है और मुझे कॉन्फ़िगरेशन प्रबंधन में विशेष रूप से दिलचस्पी है। मैं कुछ ऐसी चीज़ों के साथ आया हूं जो थोड़ी समस्याग्रस्त हो सकती हैं और यह कस्टम ब्लॉक सामग्री के बारे में है।

मैं देख सकता हूं कि कॉन्फ़िगरेशन प्रबंधन प्रणाली ब्लॉक कॉन्फ़िगरेशन - क्षेत्र, विषय, वजन, दृश्यता आदि को निर्यात करने में सक्षम है, हालांकि वास्तविक ब्लॉक सामग्री कॉन्फ़िगरेशन निर्यात में नहीं आती है, जो उचित और समझ में आता है।

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

कस्टम ब्लॉक को dev / staging सर्वर से प्रोडक्शन सर्वर में कैसे माइग्रेट किया जा सकता है? मुझे पता है कि Drupal 8 में ब्लॉक नोड्स जैसी फील्डिंग इकाइयां हैं और इसलिए इसे उसी तरह से माइग्रेट करना होगा और मैं समझता हूं कि Drupal 8 में माइग्रेट API है, लेकिन यह Drupal 6 और 7 साइट्स से कंटेंट माइग्रेट करने के लिए बनाया गया प्रतीत होता है Drupal 8 को Drupal 8 के रूप में Drupal 8 साइटों के विपरीत।

यह समस्या विशेष रूप से कस्टम ब्लॉक के बारे में है क्योंकि व्यू जैसे अन्य मॉड्यूल द्वारा उत्पन्न ब्लॉक स्पष्ट रूप से कॉन्फ़िगरेशन के रूप में माइग्रेट करेंगे।

blocks  8 

कार्यों में कई कंटेंट स्टेजिंग सॉल्यूशंस हैं, जिनमें डिस्ट्रीब्यूशन मॉड्यूल और nurpilot.com शामिल हैं (डिस्क्लेमर, यही मेरा प्रोडक्ट है)
लॉरेलन

जवाबों:


7

एक अन्य उत्तर जो मैंने यहां नहीं देखा है , वह है सिंपल ब्लॉक मॉड्यूल का उपयोग करना , जो कि कोर के 'कस्टम ब्लॉक' सेटअप से काफी मिलता-जुलता है, लेकिन सामग्री + विन्यास का एक अजीब संकर होने के बजाय, आपके पास सभी ब्लॉक सेटिंग्स और सामग्री है कॉन्फ़िगरेशन में संग्रहीत किया जाता है, जिसे साफ-साफ निर्यात और आयात किया जा सकता है।

Drupal 8 कोर में आगे की चर्चा के लिए देखें: कस्टम ब्लॉक को ठीक से निर्यात और आयात नहीं किया जा सकता है


3

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

मैंने इसे फिक्स्ड ब्लॉक कंटेंट का नाम दिया है और इसे यहां प्रकाशित किया गया है:

https://www.drupal.org/project/fixed_block_content


1

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

<?php
/**
* Import a piece of content exported by default content module.
*/
function example_import_default_content($path_to_content_json) {
  list($entity_type_id, $filename) = explode('/', $path_to_content_json);
  $p = drupal_get_path('profile', 'guts');
  $encoded_content = file_get_contents($p . '/content/' . $path_to_content_json);
  $serializer = \Drupal::service('serializer');
  $content = $serializer->decode($encoded_content, 'hal_json');
  global $base_url;
  $url = $base_url . base_path();
  $content['_links']['type']['href'] = str_replace('http://drupal.org/', $url, $content['_links']['type']['href']);
  $contents = $serializer->encode($content, 'hal_json');
  $class = 'Drupal\\' . $entity_type_id . '\Entity\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $entity_type_id)));
  $entity = $serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
  $entity->enforceIsNew(TRUE);
  $entity->save();
}

8 की आईडी के साथ एक कस्टम ब्लॉक निर्यात करें:

drush dcer block_content 8

(यदि आप Drush सेटिंग में अपना प्रोफ़ाइल पथ सेट नहीं करते हैं, तो आपको इसे ऊपर निर्दिष्ट करना होगा।)

और इस तरह अपनी फ़ाइल में परिणामी निर्यात का उपयोग करें।

<?php
/**
* Add the footer block content.
*
* Implements hook_update_N().
*/
function example_update_8001() {
  example_import_default_content('block_content/136efd63-021e-42ea-8202-8b97305cc07f.json');
}

http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf


0

मुझे यकीन नहीं है कि मुझे कई वातावरणों में ब्लॉक कॉन्फ़िगरेशन को सिंक करने का कोई मजबूत लाभ दिखाई दे रहा है क्योंकि ब्लॉक सामग्री के साथ बहुत अधिक जुड़े हुए हैं।

इसका कारण यह है कि yml फ़ाइलों से एक नया ब्लॉक बनाया जा रहा है जिसमें कोई शीर्षक / बॉडी (सामग्री) नहीं है और इसलिए वह 'टूटी / गायब' संदेश दे रहा है।

आप UUID बनाने की कोशिश कर सकते हैं (यदि आप दोनों स्थानों में ब्लॉक बनाना चाहते थे - सुनिश्चित करें कि मशीन का नाम मैचों से मेल खाता हो ...) आपके विकास खंड_कंटे टेबल मैच में आपके पास क्या उत्पादन में यूआईडी है (अन्य रिश्ते इकाई का उपयोग करने लगते हैं आईडी)। फिर, जब आप एक कॉन्फ़िगर सिंक करते हैं, तो आप yml फ़ाइलों में 'अंतर देखें' देख सकते हैं और संभवतः यह देख सकते हैं कि उत्पादन uuids से मेल खाने के लिए आपको इसे बदलने के लिए क्या चाहिए, आदि। मुझे यह काम करने के लिए मिला है, लेकिन अभी भी लगा हुआ है। जब तक आप इस प्रक्रिया से नहीं गुजरते हैं या ब्लॉक_ कॉन्टेंट, block_content__body, और block_content_field_data का उपयोग करके अपने लिए किसी तरह का डेटाबेस ब्लॉक सिंक बनाते हैं, कोड में अपने सभी ब्लॉक कॉन्फ़िगरेशन को अनदेखा करना सबसे आसान है।

यह बहुत सुंदर नहीं है, लेकिन आपको अपने ब्लॉक को कोड में कॉन्फ़िगर करने की अनुमति दे सकता है। अन्यथा, यदि आप कॉन्फ़िगर के साथ ब्लॉक तैनात करते हैं, तो वे हमेशा 'टूटे या गायब' रहेंगे।

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


0

एक ही समस्या होने और वास्तव में समाधान नहीं, केवल परिवर्धन: सहयोगी विकास में हम एक स्टेजिंग सर्वर का उपयोग कर रहे हैं जो रिपॉजिटरी से खींचता है और सभी कॉन्फ़िगरेशन को रीसेट करता है। इसका मतलब है कि ब्लॉक कॉन्फिगर को ऑटोमैटिकली रीसेट किया जा रहा है, आप बस उस सर्वर पर सीधे "कंटेंट" के रूप में विचार करने वाले ब्लॉक नहीं रख सकते।

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

दिए गए समय के लिए मुझे लगता है कि सबसे व्यावहारिक समाधान ब्लॉक-संबंधित yml फ़ाइलों को .gitignore में जोड़ना होगा।


1
कॉन्फिग इग्नोर बेहतर होने की संभावना है।
नितिनगर

0

मुझे यकीन नहीं है, हालाँकि, अगर आपको कोई समाधान नहीं मिला तो आप इस मॉड्यूल https://www.drupal.org/project/deploy को देख सकते हैं । सच कहूं, तो मुझे याद नहीं है कि DEV से PROD तक पुश ब्लॉक तैनात किए जा सकते हैं या नहीं।


0

मुझे लगता है कि इसे संभालने का सबसे अच्छा तरीका यह होगा:

यह वही है जो मैं आमतौर पर लोगों को उपयोग करते हुए देखता हूं और मैं व्यक्तिगत रूप से उपयोग करता हूं। लेकिन यह केवल ब्लॉक सामग्री की तुलना में पूरे डेटाबेस को सिंक करता है।


अगर डेटाबेस ओवरराइट के साथ कोई समस्या नहीं है, तो यह काम कर सकता है। अब, यदि एकमात्र इच्छा किसी नए कस्टम ब्लॉक को किसी मौजूदा डेटाबेस में ले जाने की है, तो इस पद्धति को लागू करना मुश्किल होगा।
कारोलस

इस उत्तर का अपना स्थान है, सिद्धांत रूप में। लेकिन व्यवहार में, यह एक अच्छा समाधान नहीं है, खासकर अगर परियोजना कॉन्फ़िगरेशन विभाजन का उपयोग कर रही है, या पर्यावरण के बीच कोई अलग कॉन्फ़िगरेशन है (जो बहुत संभावना है)।
23

0

कृपया स्ट्रक्चर सिंक मॉड्यूल पर हाथ रखें ।

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

कदम:

  1. संरचना सिंक पर जाएं।
  2. ब्लॉक टैब पर जाएं।
  3. निर्यात।
  4. आपका कॉन्फ़िगरेशन और सामग्री कॉन्फ़िगरेशन फ़ोल्डर में निर्यात की जाएगी।
  5. अन्य साइटों और आयात करने के लिए विन्यास ले लो।
  6. संरचना सिंक पर जाएं और आयात पर क्लिक करें।
  7. किया हुआ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.