Как перенести содержимое блока с разработчика на производственный сайт?

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

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

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

Как можно перенести настраиваемые блоки с сервера dev /staging на производственный сервер? Я понимаю, что блоки в Drupal 8 являются объектами, такими как узлы, и поэтому их нужно будет перенести одинаково, и я понимаю, что в Drupal 8 есть Migrate API, но это, похоже, создано для переноса содержимого с сайтов Drupal 6 и 7 на Drupal 8 в отличие от Drupal 8 для сайтов Drupal 8.

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

20 голосов | спросил welly 21 Maypm15 2015, 17:01:21

7 ответов


5

Еще один ответ, о котором я не упоминал, - это использовать модуль Simple Block , который в значительной степени идентична настройке «Custom Block» ядра, но вместо того, чтобы иметь странный гибрид контента + config, у вас есть все параметры и содержимое блока, хранящиеся в конфигурации, которые могут быть легко экспортированы и импортированы.

Смотрите, для дальнейшего обсуждения в ядре Drupal 8: Пользовательские блоки не могут быть правильно экспортированы и импортированы .

ответил geerlingguy 7 FebruaryEurope/MoscowbTue, 07 Feb 2017 21:20:01 +0300000000pmTue, 07 Feb 2017 21:20:01 +030017 2017, 21:20:01
1

Другой подход для хранения контента, который добавлен как часть разработки, также предназначен для использования, заключается в использовании контента по умолчанию для экспорта содержимого. Он сконструирован для экспорта содержимого в папку «контент» установочного профиля, а затем модуль, если он включен, автоматически приносит содержимое при установке сайта, но также возможно одновременно импортировать содержимое по одному элементу , например, в крючке обновления, с приведенным ниже кодом в вашем примере .install или example.profile:

<?php
/**
* Import a piece of content exported by default content module.
*/
function example_import_default_content($path_to_content_json) {
  list($entity_type_id, $filename) = explode('/', $path_to_content_json);
  $p = drupal_get_path('profile', 'guts');
  $encoded_content = file_get_contents($p . '/content/' . $path_to_content_json);
  $serializer = \Drupal::service('serializer');
  $content = $serializer->decode($encoded_content, 'hal_json');
  global $base_url;
  $url = $base_url . base_path();
  $content['_links']['type']['href'] = str_replace('http://drupal.org/', $url, $content['_links']['type']['href']);
  $contents = $serializer->encode($content, 'hal_json');
  $class = 'Drupal\\' . $entity_type_id . '\Entity\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $entity_type_id)));
  $entity = $serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
  $entity->enforceIsNew(TRUE);
  $entity->save();
}

Экспортируйте настраиваемый блок с идентификатором 8:

drush dcer block_content 8

(Если вы не установите свой путь профиля в настройках Drush вам нужно будет указать его выше.)

И используйте результирующий экспорт в файле example.install следующим образом:

<?php
/**
* Add the footer block content.
*
* Implements hook_update_N().
*/
function example_update_8001() {
  example_import_default_content('block_content/136efd63-021e-42ea-8202-8b97305cc07f.json');
}

http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf а >

ответил mlncn 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2016 15:45:30 +0300 2016, 15:45:30
0

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

Причиной этого является то, что из файлов yml создается новый блок, который не имеет заголовка /тела (контента) и поэтому дает сообщение «сломанное /отсутствует».

Вы можете попытаться сделать UUID (если вы хотите сделать блок в обоих местах - убедитесь, что имя машины совпадает ...) в вашей таблице разработки block_content соответствуют тому, что у вас есть на производстве (другие отношения, похоже, используйте идентификатор объекта). Затем, когда вы выполняете конфигурационную синхронизацию, вы можете увидеть «Различия в просмотре» в файлах yml и, возможно, посмотреть, что еще вам нужно изменить на dev, чтобы заставить его соответствовать производственным uuids и т. Д. Я получил это, чтобы работать, но все же понял проще всего игнорировать все ваши конфигурации блоков в коде, если вы не пройдете этот процесс или не создадите какую-то синхронизацию блока базы данных самостоятельно, используя block_content, block_content__body и block_content_field_data.

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

Другой пост в блоге предлагает создать настраиваемый блок в живой среде, но не размещая его. После синхронизации базы данных с разработчиком пользовательский блок может быть настроен, экспортирован config и, поскольку он уже существует в режиме реального импорта размещения, возможен.

ответил ArchbishopLolly 28 MonEurope/Moscow2015-12-28T22:56:05+03:00Europe/Moscow12bEurope/MoscowMon, 28 Dec 2015 22:56:05 +0300 2015, 22:56:05
0

Имея ту же проблему и не совсем решение, только добавления: В совместной разработке мы используем промежуточный сервер, который извлекает из репозитория и сбрасывает всю конфигурацию. Это означает, что конфигурация блока сбрасывается автоматически, вы просто не можете размещать блоки, которые вы считаете «контентом» непосредственно на этом сервере.

Легко использовать drush config-export sync, зная точно, что вы сделали, и быть уверенным, что любые изменения конфигурации предназначены для развертывания. Но Drupal решает, что блоки являются конфигурацией (хотя, очевидно, содержимое блока обрабатывается как контент). Таким образом, это, кажется, нарушено дизайном.

В течение указанного времени я считаю, что наиболее практичным решением было бы добавить связанные с блоком файлы yml в .gitignore.

ответил hexabinaer 11 PM00000050000003631 2016, 17:11:36
0

Я тоже не уверен, если вы не нашли решения, вы можете посмотреть этот модуль https://www.drupal.org/project/deploy . Честно говоря, я не помню, что можно развернуть push-блоки от DEV до PROD или нет.

ответил Ruslan P 16 FriEurope/Moscow2016-12-16T15:22:03+03:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2016 15:22:03 +0300 2016, 15:22:03
0

Я думаю, что лучший способ справиться с этим:

Это то, что я обычно вижу людям, использующим и лично использую. Но он синхронизирует всю базу данных по сравнению с только блочным контентом.

ответил Jigar Mehta 23 FebruaryEurope/MoscowbThu, 23 Feb 2017 18:41:53 +0300000000pmThu, 23 Feb 2017 18:41:53 +030017 2017, 18:41:53
0

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

Я назвал его Исправлено содержимое блока и опубликовано по адресу:

https://www.drupal.org/project/fixed_block_content

ответил Manuel Adan 29 +03002017-10-29T20:55:46+03:00312017bEurope/MoscowSun, 29 Oct 2017 20:55:46 +0300 2017, 20:55:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132