Исключить конфигурацию из импорта / экспорта

16

Я подумал, что это простой пример использования новой системы управления конфигурацией, но мне не повезло узнать, как решить эту проблему:

проблема

Я хочу сохранить конфигурацию в git и использовать drush для экспорта конфигурации во время разработки, а затем при развертывании импортировать конфигурацию. Очень похоже на возвращение функций в Drupal 7. Моя проблема в том, что я не хочу хранить коды доступа в git для различных интеграций. Это приводит к удалению этих конфигураций на
$ drush cim -y

Где я посмотрел

Я надеялся, что будет простой список / конфигурация для конфигов, которые должны быть исключены при импорте / экспорте. Кажется, что в какой-то момент это произошло, но, должно быть, его снова удалили, поскольку он доступен в текущем выпуске Drupal 8.

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

Я что-то упустил или просто невозможно исключить конфиги из импорта / экспорта?

googletorp
источник

Ответы:

7

Невозможно специально исключить , но есть что-то.

Как и $ conf в Drupal 7, в файле settings.php есть $ config, который вы можете использовать для локального переопределения чего-либо в конфигурации. Формат есть $config['name.of.config']['nested']['key'].

Обратите внимание, что все, что хранится в конфигурации, все еще находится в git, поэтому вам нужно либо не сохранять ни один, либо проверять коды доступа в git. Кроме того, пользовательский интерфейс покажет, что на самом деле хранится в конфигурации, и в настоящее время не будет указывать, что он переопределен. Есть нерешенные вопросы, чтобы улучшить это.

Я понимаю, что это имеет ограничения, но сейчас невозможно сохранить что-либо вне экспортированной конфигурации. Насколько я знаю.

Berdir
источник
Таким образом, вы должны установить / обновить конфигурацию в вашем файле settings.php вместо использования интерфейса.
googletorp
Да, в этом нет ничего нового. В этом контексте в d8 ничего не изменилось в рабочем процессе.
11

Вы можете использовать модуль «Config Ignore»: https://www.drupal.org/project/config_ignore

Вы когда-нибудь сталкивались с тем, что конфигурация вашего сайта была переопределена конфигурацией в файловой системе, когда выполнялась команда drush cim?

Уже нет!

Этот модуль является инструментом, позволяющим вам сохранить конфигурацию, которую вы хотите, на месте.

Weri
источник
2
config_ignore, вероятно, является наиболее стабильным и простым решением, доступным в настоящее время, и это решение, вероятно, наилучшим образом отвечает желанию OP иметь «простой список / конфигурацию для конфигураций, которые должны быть исключены при импорте / экспорте»
bdanin
7

Вы можете использовать комбинацию config_ignore и config_split .

Игнорирование конфигурации позволяет вам игнорировать подмножество объектов конфигурации во время импорта (также предотвращает удаление, начиная с версии 2.x). К сожалению, это не мешает исключению конфигурации во время экспорта.

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

Я написал об исключении конфигурации из управления конфигурацией в Drupal 8 на эту тему.

Герт ван Дорт
источник
5

Для разделения конфигурации вы можете использовать https://www.drupal.org/project/config_split .

Введите config_split, который предоставляет консольную команду Drupal для импорта и экспорта отфильтрованной конфигурации. Вероятно, вскоре последует интеграция с Drush (в конце концов, фильтр основан на фильтре --skip-modules от drush).

Вы можете разделить экспорт на разные каталоги, которые затем можете игнорировать.

В drupal con dublin 2016 была очень хорошая презентация людей, отвечающих за инициативу CMI, которую я призываю вас проверить, несмотря ни на что.

Потни Свиттерс
источник
2

Я только что проверил @berdir в # 1 ответе, и он отлично работает. Только я добавляю небольшое примечание: вы должны поместить весь конфиг в эту переменную. Без этого $ config var работает неправильно.

Что-то вроде этого:

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

Документация: https://www.drupal.org/node/1928898

Примечание из приведенной выше документации: «Обратите внимание, что значения, переопределенные через $ config в settings.php, не будут доступны для просмотра из интерфейса администрирования Drupal».

estoyausente
источник
3
Вы не должны делать это. Он должен сливаться с любыми значениями, которые вы определяете, но, возможно, он не работает должным образом с некоторыми структурами.
Бердир
О, я не мог сделать это правильно. Я попытаюсь снова отладить его, и если он не запустится правильно, возможно, я смогу открыть ошибку в d.org. Благодарность!
estoyausente
1
Я могу подтвердить, что вы можете сделать что-то вроде$config['module.settings']['some']['value'] = 'foo';
googletorp
2

Я несколько удивляюсь, почему никто не упомянул инструменты Drush CMI . Волшебные слова есть drush cexyи config-ignore.yml. У вас будет список, который вы можете настроить. Он был нужен один раз, чтобы исключить экземпляры блоков, в то время как базы блоков были обработаны.

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

Это где --ignore-listвариант drush cexyприходит.

В нашем проекте у нас есть папка ./drush, поэтому мы помещаем в ее файл config-ignore.yml файл со следующим содержимым.

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

Так что теперь мы бежим drush cexyтак

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

Так что это делает экспорт активной конфигурации, а затем применить список игнорирования для удаления нежелательной конфигурации.

Так что теперь при запуске git statusвы должны видеть только те изменения, которые хотите зафиксировать.

Источник: https://www.previousnext.com.au/blog/introduction-drush-cmi-tools

Установка

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

Источник: https://github.com/previousnext/drush_cmi_tools

leymannx
источник
1

Использование конфигурации split (рекомендуется)

Модуль расщепления конфига был сделан специально для этого.

Конфиг сплит интегрирован с Drush.

Использование только Drush

Drush также должен быть в состоянии сделать это, используя --skip-modulesфлаг.

Вы можете добавить следующие строки в drupal / drushrc.php в webroot вашего проекта, чтобы сделать это автоматически.

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

См. Http://www.drush.org/en/master/config-exporting/#ignoring-development-modules.

К сожалению, есть ошибка с этой функциональностью: https://github.com/drush-ops/drush/issues/1820 . Поэтому на данный момент вам также необходимо добавить эти файлы конфигурации в ваш .gitignore, чтобы экспортированные файлы конфигурации не были зафиксированы. Их работа продолжается, чтобы, возможно, отказаться от этой (ошибочной) функциональности от drush в пользу разделения конфигурации.

gagarine
источник
2
Игнорирование файлов конфигурации в git не совсем работает. Не экспортированная конфигурация будет удалена. Например, страницы пользовательских панелей будут удалены при импорте конфигурации.
Добжынс
@ user157272, даже если вы импортируете, используя drush с ['config-import'] ['skip-modules']?
Gagarine
drushrc.php может быть даже размещен вне webroot. Например, на уровень выше, что полезно при работе с Drupal в настройке композитора: github.com/drupal-composer/drupal-project .
leymannx
Это не сработало для меня. Я добавил модули, но они все еще были добавлены в конфигурацию включения / выключения модулей.
Джереми Джон
Я обновил ответ текущими лучшими практиками (
конфиг