Не удалось установить … уже существуют в активной конфигурации
На 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
Почему эта простая вещь не поддерживается? Это ошибка? Что я должен сделать, чтобы иметь возможность использовать свою функцию?
7 answers
С drush вы, вероятно, сможете сделать
drush config-delete module_name.settings
Для удаления конфигураций, которые жалуются
Найденный модуль, используйте Простую установку модуля для очистки активной конфигурации без использования devel или drush. Это работает, даже если вы пропустили дополнительную папку и принудительный параметр в файлах конфигурации вашего модуля (yml)
У меня такая же проблема с сайтом пантеона. Я ввел команду drush
Пантеон: drush @пантеон.ИМЯ САЙТА.Конфигурация ENVNAME-удалить ИМЯ ОШИБКИ
Локальный сайт: конфигурация drush- удалить ИМЯ ОШИБКИ
Это работа для меня.
Эта функция не поддерживается, потому что модуль не может заменить объект конфигурации, который уже существует, с помощью install config.
Чтобы добавить конфигурации формы и режима просмотра для уже существующего типа узла, вам необходимо реализовать это в коде в hook_install().
Или вы должны сначала удалить тип узла на своем сайте, но затем вам также придется удалить содержимое.
И нет, это не ошибка, это то, как она определена, чтобы предотвратить потерю конфигурации.
С 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]
РЕДАКТИРОВАТЬ: теперь есть способ улучшить решение, см.: Как удалить объект конфигурации из активной конфигурации?
Если вы хотите добавить конфигурации в свой пользовательский модуль, но они уже существуют в активной конфигурации, и по какой-то причине вы не можете использовать 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();
}
}
Иногда модули не удаляются полностью. Попытка повторно включить более новую версию приведет к этой проблеме.
Сначала сделайте резервную копию базы данных и выполните следующие действия:
drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'