स्थापित करने में असमर्थ ... सक्रिय कॉन्फ़िगरेशन में पहले से मौजूद है


15

Drupal 8.1 पर मैं उस तरह के संदेशों में भागता रहता हूं जब मैं एक कस्टम मॉड्यूल या एक कस्टम फीचर को सक्रिय करने की कोशिश करता हूं जो मूल पृष्ठ पर कुछ संशोधन करता है। (फ़ील्ड जोड़ें)।

यह वास्तव में कष्टप्रद है ...

कदम:

  • डेटाबेस पूरी तरह से साफ़ करें
  • /install.php पर जाएं और मानक प्रोफ़ाइल चुनें
  • अब जब कि साइट एक्सटेंड पर जा रही है
  • फ़ीचर चुनें - मूल पृष्ठ

परिणाम:

Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.

खैर, हाँ ... यही मैं करना चाहता हूँ: उन डिफ़ॉल्ट सेटिंग्स को बदलें!

expexted:

मेरी सुविधा को स्थापित करने में सक्षम हों जो मूल पृष्ठ पर कुछ संशोधन करता है।

मेरी सुविधा

यहाँ मेरा फीचर फीचर मॉड्यूल के साथ बनाया गया है

यह मूल रूप से मूल पृष्ठ पर दो फ़ील्ड, बैनर_इमेज और बैकग्राउंड_इमेज जोड़ता है

फ़ाइलें:

config
    install
        core.base_field_override.node.page.changed.yml
        core.base_field_override.node.page.created.yml
        core.base_field_override.node.page.promote.yml
        core.base_field_override.node.page.status.yml
        core.base_field_override.node.page.sticky.yml
        core.base_field_override.node.page.title.yml
        core.base_field_override.node.page.uid.yml
        core.entity_form_display.node.page.default.yml
        core.entity_view_display.node.page.default.yml
        core.entity_view_display.node.page.teaser.yml
        field.field.node.page.body.yml
        field.field.node.page.field_banner_image.yml
        field.field.node.page.field_image.yml
        field.storage.node.field_banner_image.yml
        language.content_settings.node.page.yml
        node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml

इस साधारण बात का समर्थन क्यों नहीं किया जाता है? यह एक बग है? अपनी सुविधा का उपयोग करने में सक्षम होने के लिए मुझे क्या करना चाहिए?


1
Drupal EasyInstall मॉड्यूल का उपयोग करें जिसका उपयोग सक्रिय कॉन्फ़िगरेशन को हटाने के लिए किया जाता है
कार्तिकेयन मणिवसगाम

1
+1 दिलचस्प मॉड्यूल - एक नज़र के लायक - शुक्रिया @KarthikeyanManivasagam
therobyouknow

जवाबों:


24

ड्रश के साथ आप शायद कर सकते हैं

drush config-delete module_name.settings

उन कॉन्फ़िगरेशन को हटाने के लिए जो शिकायत करते हैं


मुझे ड्रुपल के खिलाफ मेरी महाकाव्य लड़ाई के दौरान भी पता चला है कि आप optional/इसे बंद करने के लिए एक फ़ोल्डर में उन कॉन्फ़िगर कर सकते हैं । लेकिन मैं सभी निहितार्थों के बारे में निश्चित नहीं हूं ...
गिलोय बोइस

@GuillaumeBois: निहितार्थ यह है कि यदि पहले से स्थापित है, या निर्भरता पूरी नहीं हुई है तो इन वैकल्पिक विन्यासों को अनदेखा किया जाएगा। यदि मॉड्यूल काम करने के लिए कॉन्फ़िगरेशन आवश्यक है तो, यह आगे की समस्याओं को जन्म दे सकता है।
रेन्फ्रॉ

+1 धन्यवाद @GiorgosK (2 का भाग 1): मुझे अपने मामले में काम करने के लिए यह समाधान मिला: मुझे अपनी ब्राउज़र साइट के लिए वेब ब्राउज़र में यह त्रुटि दिखाई दी: Warning: in_array() expects parameter 2 to be array, null given in lightning_layout_block_alter() (line 91 of modules/contrib/lightning_layout/lightning_layout.module).मेरे साइट कोड git स्रोत और डेटाबेस को किसी अन्य मशीन पर सेट करने के बाद ।
इसके बाद

(भाग 2 का 2) इसलिए इसे हल करने के लिए मैंने बिजली की स्थापना रद्द करने का प्रयास किया और इसे फिर से स्थापित किया। drush pm-uninstall lightning_layoutकाम किया है, लेकिन तब जब मैंने इसे पुनः स्थापित करने की कोशिश की, तो मुझे drush en lightning_layoutयह कमांड लाइन त्रुटि मिली "In PreistingistingConfigException.php लाइन 65: कॉन्फिगरेशन ऑब्जेक्ट्स (field.storage.node.panelizer) जो lightning_layer द्वारा पहले से ही सक्रिय कॉन्फ़िगरेशन में उपलब्ध हैं" तो मैंने आपका उपयोग किया इस प्रकार समाधान: drush config-delete field.storage.node.panelizer और फिर मॉड्यूल को फिर से सक्षम करने में सक्षम था:drush en lightning_layout
therobyouknow

1
यदि आप सुनिश्चित नहीं हैं कि आपको कौन सी "सेटिंग" हटानी है, तो आपको कॉन्फ़िगरेशन का सटीक नाम प्राप्त करने के लिए "ड्रश कॉन्फिगर-लिस्ट" चलाना चाहिए
जॉर्ज वेल्वर्ट

3

यह चीज समर्थित नहीं है क्योंकि एक मॉड्यूल एक कॉन्फ़िगर इकाई को प्रतिस्थापित नहीं कर सकता है जो पहले से ही स्थापित कॉन्फ़िगरेशन के साथ मौजूद है।

पहले से मौजूद नोड प्रकार के लिए फ़ॉर्म और व्यू मोड कॉन्फ़िगरेशन जोड़ने के लिए, आपको इसे हुक_ इंस्टॉलेशन () में कोड में लागू करना होगा।

या आपको अपनी साइट पर पहले नोड प्रकार को हटाना होगा, लेकिन फिर आपको सामग्री को भी हटाना होगा।

और नहीं, यह एक बग नहीं है, यह है कि यह कैसे कॉन्फ़िगरेशन के नुकसान को रोकने के लिए परिभाषित किया गया है।


यह बेहद दुखद है। D7 में यह संभव था (फ़ीचर के माध्यम से एक मूल पृष्ठ पर फ़ील्ड जोड़ें)। मुझे अभी भी लगता है कि यह डी 8 में भी होना चाहिए। आप कहते हैं कि यह कॉन्फ़िगरेशन के नुकसान को रोकने के लिए है, लेकिन वास्तव में, यह कॉन्फ़िगरेशन (फ़ील्ड, वजन, लेबल, आदि) जोड़ता है। ध्यान दें कि मुझे अपने कस्टम मॉड्यूल के साथ भी यह समस्या थी।
गिलोय बोइस

नहीं, यह सिर्फ जोड़ नहीं है। दृश्य और प्रपत्र प्रदर्शित एकल नोड प्रकार के सभी क्षेत्रों में साझा किए जाते हैं। यदि दो मॉड्यूल उस फ़ाइल को जोड़ने का प्रयास करते हैं, तो कौन जीतने वाला है? मौजूदा फ़ील्ड के बारे में क्या होता है जो पहले से ही पृष्ठ प्रकार पर हैं? क्या होगा यदि मूल नोड प्रकार मौजूद है, लेकिन आपके क्षेत्र की तुलना में विभिन्न सेटिंग्स के साथ? इस तरह व्यवहार परिदृश्य परिभाषित नहीं है। एक स्टैंडअलोन सुविधा के लिए, आप अपने स्वयं के नोड प्रकार को परिभाषित करने से बेहतर हैं और इस परिवर्तन को अपनी साइट पर तैनात करने के लिए, आपको 7.x की तरह एक फ़ीचर मॉड्यूल की आवश्यकता नहीं है, आप बस कॉन्फ़िगरेशन को निर्यात कर सकते हैं और इसे फिर से आयात कर सकते हैं।
बेर्डिर

@berdir यह बहुत दिलचस्प है। इसलिए मैं इस मुद्दे से एक उपयोगकर्ता प्रोफ़ाइल सुविधा बनाने की कोशिश कर रहा हूं जिसमें दृश्य और प्रपत्र नोट शामिल हैं। तो क्या आप कह रहे हैं कि यह सुविधाओं में नहीं किया जा सकता है क्योंकि उपयोगकर्ता सामग्री प्रकार पहले से ही मौजूद होगा और सुविधा इसे सक्षम करने का प्रयास कर रही है? क्या किसी सुविधा को इस पर ओवरराइड करने की अनुमति देने का कोई तरीका है ताकि कोई पहले से मौजूद साइट पर प्रोफ़ाइल सुविधा सक्षम कर सके?
1913

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

3

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


1
यह एक शानदार विकल्प है! मैंने आज ही इसका उपयोग किया है और इसने मुझे इतना समय बचाया है!
rtd1123

3

मेरे पास पैन्थियोन साइट के लिए एक ही मुद्दा है। मैंने ड्रश कमांड में प्रवेश किया

Pantheonsite: drush @ pantheon.SITENAME.ENVNAME कॉन्फ़िग-डिलीट ERRORNAME

लोकलसइट: ड्रश कॉन्फिगर-डिलीट ERRORNAME

यह मेरे लिए काम कर रहा है।


1

इसके साथ drush enकाम करता है!

[profile_test]$ drush en feature_basic_page -y
The following extensions will be enabled: feature_basic_page
Do you really want to continue? (y/n): y    
feature_basic_page was enabled successfully.   [ok]

संपादित करें: अब एक तरीका बेहतर समाधान है, देखें: मैं सक्रिय कॉन्फ़िगरेशन से कॉन्फ़िगरेशन ऑब्जेक्ट कैसे निकालूं?


0

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

अपने कस्टम मॉड्यूल, / config / hook_install में एक नया फ़ोल्डर जोड़ें और उस फ़ोल्डर में अपनी config .yml फ़ाइलें जोड़ें, फिर अपने मॉड्यूल के hook_install में।

use Drupal\Component\Serialization\Yaml;

/**
 * Implements hook_install().
 */
function mymodule_install() {

  // Replace these configs.  We're using code to do this, as they are already
  // installed.
  $config_files = [
    'language.types',
    'language.negotiation',
  ];

  foreach ($config_files as $config_id) {
    $raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
    \Drupal::configFactory()->getEditable($config_id)
      ->setData(Yaml::decode($raw_data))
      ->save();
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.