Не вдається встановити ... вже існує в активній конфігурації


15

У Drupal 8.1 я продовжую працювати в таких видах повідомлень, коли намагаюся активувати спеціальний модуль або спеціальну функцію, яка вносить деякі зміни в основну сторінку. (додавання полів).

Це справді дратує ...

Кроки:

  • Очистити базу даних повністю
  • перейдіть до /install.php та оберіть Стандартний профіль
  • Тепер, коли сайт працює, перейдіть до Extend
  • Виберіть Функція - Основна сторінка

Результат:

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.

Ну так ... ось що я хочу зробити: змінити ці налаштування за замовчуванням!

Очікується:

Бути в змозі встановити мою функцію, яка вносить деякі зміни до основної сторінки.

Моя особливість

Ось моя функція створення за допомогою модуля "Особливості"

В основному він додає два поля, банер-зображення та фонові зображення на основну сторінку

Файли:

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, який використовується для видалення активних конфігурацій
Karthikeyan Manivasagam

1
+1 цікавий модуль - варто подивитися - дякую @KarthikeyanManivasagam
therobyouknow

Відповіді:


24

З барабаном ви, ймовірно, можете обійтися

drush config-delete module_name.settings

видалити конфігурації, на які скаржиться


Під час моєї епічної битви проти Drupal я також виявив, що ви можете переміщувати ці конфігурації в optional/папці, щоб зробити її закритою. Але я не впевнений у всіх наслідках ...
Гійом Буа

@GuillaumeBois: наслідки полягають у тому, що ці опціональні конфігурації будуть ігноруватися, якщо вони вже встановлені, або якщо залежності не виконано. Отже, це може призвести до подальших проблем, якщо конфігурація необхідна для роботи модуля.
Renrhaf

+1 дякую @GiorgosK (Частина 1 з 2): Я виявив, що це рішення працює в моєму випадку: у мене з’явилася помилка, що відображається у веб-браузері для мого сайту розробників: 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 джерела та бази даних на іншій машині .
therobyouknow

(Частина 2 з 2) Отже, щоб вирішити це, я спробував видалити lightning_layout та повторно встановити його. drush pm-uninstall lightning_layoutпрацював, але тоді, коли я намагався повторно встановити його, drush en lightning_layoutя отримав цю помилку командного рядка "У рядку 65 PreExistingConfigException.php: Об'єкти конфігурації (field.storage.node.panelizer), що надаються lightning_layout, вже існують в активній конфігурації". рішення таким чином: drush config-delete field.storage.node.panelizer і потім зміг повторно включити модуль:drush en lightning_layout
therobyouknow

1
якщо ви не впевнені, які "налаштування" потрібно видалити, слід запустити "drush config-list", щоб отримати точну назву конфігурації
Jorge Valvert

3

Ця річ не підтримується, оскільки модуль може не замінити об'єкт конфігурації, який вже існує, встановити config config.

Щоб додати конфігурації форми та режиму перегляду для вже існуючого типу вузла, вам потрібно реалізувати це в коді в куку_інсталяції ().

Або вам потрібно спочатку видалити тип вузла на своєму веб-сайті, але потім також потрібно видалити вміст.

І ні, це не помилка, саме так вона визначена для запобігання втраті конфігурації.


Це дуже сумно. У D7 це було можливо (додайте поля на основну сторінку за допомогою функції). Я все ще думаю, що це має бути і в D8. Ви кажете, що це запобігає втраті конфігурації, але насправді вона просто додає конфігурації (поля, вага, мітка тощо). Зауважте, що у мене також були проблеми з власними спеціальними модулями.
Гійом Буа

Ні, це не просто додає. відображення перегляду та форми поділяються у всіх полях одного типу вузла. що станеться, якщо два модулі намагаються додати цей файл, хто виграє? Що відбувається з існуючими полями, які вже є типом сторінки? що робити, якщо основний тип вузла існує, але з іншими налаштуваннями, ніж у вашому полі? Такі сценарії поведінки не визначені. Для окремої функції вам краще визначити власний тип вузла та розгорнути цю зміну на своєму власному сайті, вам не потрібен модуль функцій, як у 7.x, ви можете просто експортувати конфігурацію та імпортувати її знову.
Бердір

@berdir це дуже цікаво. Тому я виходжу з цього питання, намагаючись створити функцію профілю користувача, яка включає нотатки перегляду та форми. Так ви кажете, що цього не можна зробити в функціях, оскільки тип вмісту користувача вже існував і функція намагається це ввімкнути? Чи є якийсь спосіб дозволити функції змінити це, щоб хтось міг включити функцію профілю на вже існуючому сайті?
kaleemclarkson

Користувач @kaleemclarkson - це не тип вмісту, а тип сутності. Єдиний спосіб зробити це - це те, що я описав, ви повинні реалізувати код у mock_install () вашого функціонального модуля для встановлення форми та перегляду конфігурації дисплея. Або скористайтеся модулем профілю та вкажіть там власний тип профілю.
Бердір

3

Знайдений модуль, використовуйте модуль Easy Install для очищення активної конфігурації без використання devel або dush . Він працює навіть у тому випадку, якщо ви пропустили необов’язкові папки та примусовий параметр у файлах конфігурації модуля ( yml )


1
Це фантастичний варіант! Я просто сьогодні цим скористався, і це врятувало мені стільки часу!
rtd1123

3

У мене ж випуск для сайту з пантеоном. Я вступив до команди drush

Пантеосайт: drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME

Локальний сайт: drush config-delete ERRORNAME

це робота для мене.



0

Якщо ви хочете додати конфігурації до свого користувальницького модуля, але вони вже існують в активній конфігурації, і ви чомусь не можете використовувати drush для видалення цих конфігурацій (у моєму випадку, тому що це частина профілю встановлення), і ви впевнені не буде проблеми з перезаписом конфігурації, ось підхід до заміни цих конфігурацій.

Додайте нову папку у свій спеціальний модуль / config / kuka_install та додайте свої. Config-файли config у цю папку, а потім у гачку_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();
  }
}

0

Іноді модулі не видаляються чисто. Спроба повторного включення нової версії спричинить цю проблему.

Спершу зробіть резервну копію БД та запустіть наступне:

drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.