Я наконец начал серьезно относиться к Drupal 8, и меня особенно интересует управление конфигурацией. Я столкнулся с чем-то, что может быть немного проблематично, и это касается пользовательского контента блока.
Я вижу, что система управления конфигурацией может экспортировать конфигурацию блока - регион, тему, вес, видимость и т. Д., Однако фактическое содержимое блока не встречается при экспорте конфигурации, что является разумным и понятным.
При импорте этой конфигурации блока на рабочий сайт создается впечатление, что создается конфигурация блока и создается сообщение о задержке, сообщающее, что блок сломан или отсутствует. Очевидно, что содержимое блока не существует на рабочем сервере.
Как можно перенести пользовательские блоки с сервера разработки / размещения на рабочий сервер? Я понимаю, что блоки в Drupal 8 являются полевыми объектами, такими как узлы, и поэтому их нужно будет перенести аналогичным образом, и я понимаю, что в Drupal 8 есть API Migrate, но, похоже, он создан для переноса контента с сайтов Drupal 6 и 7 в Drupal 8 в отличие от Drupal 8 до сайтов Drupal 8.
Эта проблема касается, в частности, пользовательских блоков, поскольку блоки, сгенерированные другими модулями, такими как Views, очевидно, будут мигрировать в конфигурации.
Ответы:
Другой ответ, о котором я не упомянул, это использование модуля Simple Block , который в значительной степени идентичен настройке ядра «Custom Block», но вместо странного гибрида content + config у вас есть все настройки и контент Block. хранится в конфигурации, которая может быть чисто экспортирована и импортирована.
См. Для дальнейшего обсуждения в ядре Drupal 8: Пользовательские блоки не могут быть должным образом экспортированы и импортированы .
источник
Я только что опубликовал готовый модуль, который решает эту проблему. По сути, модуль предоставляет тип блока на основе конфигурации (фиксированный блок), который обертывает пользовательский блок (блок контента). Если блок контента не существует, он создается с контентом по умолчанию или пустым, если контент по умолчанию не был установлен. Все делается через пользовательский интерфейс, никаких специальных файлов или пользовательских модулей не требуется.
Я назвал это Фиксированным содержимым блока, и он опубликован по адресу:
https://www.drupal.org/project/fixed_block_content
источник
Еще один подход к сохранению контента, добавляемого как часть разработки, и его активизации - использование модуля контента по умолчанию для экспорта контента. Он создан для экспорта контента в папку «содержимого» профиля установки, а затем модуль, если он включен, автоматически переносит контент при установке сайта, но также возможно импортировать контент по одному элементу за раз например, в хуке обновления, с кодом ниже в вашем example.install или example.profile:
Экспортируйте пользовательский блок с идентификатором 8:
(Если вы не указали путь к профилю в настройках Drush, вам придется указать его выше.)
И используйте результирующий экспорт в вашем файле example.install следующим образом:
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf
источник
Я не уверен, что вижу какие-то сильные преимущества синхронизации конфигураций блоков между несколькими средами, поскольку блоки так переплетаются с контентом.
Причина этого в том, что из yml-файлов создается новый блок, который не имеет заголовка / тела (содержимого) и поэтому выдает сообщение «сломан / отсутствует».
Вы можете попытаться сделать UUID (если вы хотите сделать блок в обоих местах - убедитесь, что имя машины совпадает ...) в вашей таблице разработки block_content, совпадают с тем, что у вас есть в производстве (другие отношения, кажется, используют сущность мне бы). Затем, когда вы выполняете синхронизацию конфигурации, вы можете увидеть «Просмотр различий» в файлах yml и, возможно, увидеть, что еще нужно изменить в dev, чтобы он соответствовал рабочим uuids и т. Д. Я заставил это работать, но все же подумал Проще всего игнорировать все ваши конфигурации блоков в коде, если вы не пройдете этот процесс или не создадите для себя некую синхронизацию блоков базы данных, используя block_content, block_content__body и block_content_field_data.
Это не очень элегантно, но может позволить вам сохранить ваши конфиги блоков в коде. В противном случае, если вы продолжите развертывать блоки с помощью config, они всегда будут «сломаны или отсутствуют».
Еще одно сообщение в блоге предлагает создать пользовательский блок в реальной среде, но не размещать его. После синхронизации базы данных с dev можно настроить пользовательский блок, экспортировать конфигурацию и, поскольку он уже существует в реальном времени, возможен импорт мест размещения.
источник
Имея ту же проблему, но не решение, а только дополнения: в совместной разработке мы используем промежуточный сервер, который извлекает данные из хранилища и сбрасывает все настройки. Это означает, что конфигурация блоков сбрасывается автоматически, вы просто не можете размещать блоки, которые вы рассматриваете как «контент», непосредственно на этом сервере.
Использовать синхронизацию drush config-export легко, зная точно, что вы сделали, и будучи уверенным, что любые изменения конфигурации предназначены для развертывания. Но Drupal решает для нас, что блоки - это конфигурация (хотя очевидно, что контент блоков обрабатывается как контент). Так что это кажется нарушенным по замыслу.
На данный момент, я считаю, наиболее практичным решением было бы добавить связанные с блоками файлы yml в .gitignore.
источник
Я тоже не уверен, однако, если вы не нашли никакого решения, вы можете посмотреть этот модуль https://www.drupal.org/project/deploy . Честно говоря, я не помню, можно ли развернуть push-блоки из DEV в PROD или нет.
источник
Я думаю, что лучший способ справиться с этим:
Это то, что я обычно использую, и лично я использую. Но он синхронизирует всю базу данных по сравнению только с содержимым блока.
источник
Пожалуйста, возьмите руки на модуль синхронизации структуры .
шаги:
источник