Не удалось установить … уже существуют в активной конфигурации


На 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.

Ну да... вот что я хочу сделать: изменить настройки по умолчанию!

Ожидаемый:

Сможете установить мою функцию, которая вносит некоторые изменения в базовую страницу.

Моя Особенность

Вот моя функция, созданная с помощью модуля функций

Он в основном добавляет два поля, banner_image и background_image к базовому страница

Файлы:

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

Почему эта простая вещь не поддерживается? Это ошибка? Что я должен сделать, чтобы иметь возможность использовать свою функцию?

 15
Author: Guillaume Bois, 2016-07-22

7 answers

С drush вы, вероятно, сможете сделать

drush config-delete module_name.settings

Для удаления конфигураций, которые жалуются

 25
Author: GiorgosK, 2017-05-25 14:16:56

Найденный модуль, используйте Простую установку модуля для очистки активной конфигурации без использования devel или drush. Это работает, даже если вы пропустили дополнительную папку и принудительный параметр в файлах конфигурации вашего модуля (yml)

 4
Author: Karthikeyan Manivasagam, 2017-09-24 08:10:16

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

Пантеон: drush @пантеон.ИМЯ САЙТА.Конфигурация ENVNAME-удалить ИМЯ ОШИБКИ

Локальный сайт: конфигурация drush- удалить ИМЯ ОШИБКИ

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

 4
Author: omkar gaonkar, 2020-06-15 09:13:00

Эта функция не поддерживается, потому что модуль не может заменить объект конфигурации, который уже существует, с помощью install config.

Чтобы добавить конфигурации формы и режима просмотра для уже существующего типа узла, вам необходимо реализовать это в коде в hook_install().

Или вы должны сначала удалить тип узла на своем сайте, но затем вам также придется удалить содержимое.

И нет, это не ошибка, это то, как она определена, чтобы предотвратить потерю конфигурации.

 3
Author: Berdir, 2016-07-22 19:17:59

С 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]

РЕДАКТИРОВАТЬ: теперь есть способ улучшить решение, см.: Как удалить объект конфигурации из активной конфигурации?

 1
Author: Guillaume Bois, 2017-10-18 19:29:54

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

Добавьте новую папку в свой пользовательский модуль /config/hook_install и добавьте свою конфигурацию.файлы yml в этой папке, затем в вашем модуле установка крюка_.

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
Author: oknate, 2019-12-04 19:29:30

Иногда модули не удаляются полностью. Попытка повторно включить более новую версию приведет к этой проблеме.

Сначала сделайте резервную копию базы данных и выполните следующие действия:

drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
 0
Author: augusto, 2020-03-18 11:15:22