Экспорт и импорт контента Drupal7-Drupal8 вручную

Главные вкладки

Аватар пользователя kovalevm kovalevm 1 декабря 2019 в 11:18

Добрый день!
При попытке выполнить миграцию с Drupal 7 на Drupal 8 не перенеслась огромная часть контента, остальное переносилось почти неделю с постоянным зависанием, ошибками 500.

Есть ли инструкция по переносу контента с помощью модулей экспорта-импорта? Пробовали Views Data Export, Features, не удается разобраться, как именно экспортировать контент.
Подскажите, пожалуйста.

Лучший ответ

Аватар пользователя gun_dose gun_dose 1 декабря 2019 в 11:54

Там же в ядре есть встроенные миграции.

Комментарии

Аватар пользователя kovalevm kovalevm 1 декабря 2019 в 18:13

Да, больше недели пытались мигрировать встроенным модулем Migrate, постоянно выдавались ошибки, что не перенеслись материалы из-за того, что не прикреплены к пользователям (не дословно). Видимо, нужно сначала переносить пользователей, как-то указывать это в настройках, не нашел.
Потом больше 5 дней переносил только подписчиков рассылки, хотя выделенный сервер для высоконагруженных cms (проблема описана на drupal.org, решения нет). В итоге постоянные ошибки 500. Поэтому ищу способы миграции контента вручную или другим модулем.

Аватар пользователя kovalevm kovalevm 1 декабря 2019 в 22:29

Попытался еще раз запустить миграцию. Вот такие ошибки выдает в больших количествах на разные типы материалов:

Миграция d7_comment не соответствует требованиям. Missing migrations d7_node:blog, d7_node:fairy, d7_node:family (и так далее)
Operation on Comments failed
Миграция d7_node:webform не соответствует требованиям. Missing migrations d7_user. requirements: d7_user.

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

Аватар пользователя kovalevm kovalevm 2 декабря 2019 в 7:49

Да, возможно ли сохранить все связи и отношения при экспорте, насколько корректен будет такой вид миграции?
Также возможно удалось бы мигрировать с помощью Migrate, если разобраться в этом

Миграция d7_comment не соответствует требованиям. Missing migrations d7_node:blog, d7_node:fairy, d7_node:family (и так далее)

Пока не нашел на иностранных сайтах о друпале, с чем эта ошибка связана.

Аватар пользователя Orion76 Orion76 2 декабря 2019 в 8:31
1

Непосредственно для "стандартной" миграции с 7 на 8 модуль Migrate не использовал,
но судя по содержанию ошибок, наверное на сайте друпал7 есть "дополнительные" бандлы(bundle) нод (fairy, family и т.п.) с "дополнительными" полями.
И наверное для этих бандлов где-то в админке migrate необходимо добавить миграции для этих бандлов, с настройкой соответствия полей друпад7->друпал8.
Т.е. какое поле бандла друпад7 соответствует полю соответствующего бандла друпал8.

А вообще, полный функционал модуля Migrate на пару порядков мощнее "стандартных" миграций drupalN > друпал8.

Он может импортировать данные сущностей(материалов) практически из любого формата (сторонняя БД, csv-json-xml файлы и т.п.)
С преобразованием исходных значений-форматов полей в процессе импорта, с учетом всех связей материалов и т.п.

ЗЫ. для добавления кастомных миграций необходимо установить вспомагательные модули migrate_tools и migrate_plus
в коде данных модулей есть примеры миграций, глядя на которые не очень сложно добавить свои.
Так же в интернетах есть куча текстовых и видео руководств по настройке кастомных миграций.
На английском так вообще море.

Аватар пользователя kovalevm kovalevm 2 декабря 2019 в 8:48

Спасибо, да, установлены migrate_tools и migrate_plus, но в ходе миграции не появляются дополнительные настройки, кроме стандартных - исходная база данных и путь к файлам сайта.
Их необходимо указывать вручную в файлах модуля? Обновиться пытаюсь без помощи drush.

Аватар пользователя kovalevm kovalevm 4 декабря 2019 в 23:10

Кажется, разгадка совсем близко
https://www.drupal.org/project/drupal/issues/2916266

Помогите, пожалуйста, правильно составить функцию для

A non-existent config entity name returned by FieldStorageConfigInterface::getBundles(): entity type: node, bundle: comment_node_ffilm, field name: field_filesize

<?phpfunction my_module_update_8001() {
  ## Fixes:
  ## A non-existent config entity name returned by FieldStorageConfigInterface::getBundles(): entity type: node, bundle: comment_node_ffilm, field name: field_filesize
  $entity_type = 'node';
  $bundle = 'comment_node_ffilm';
  $field_name = 'field_filesize';

  /** @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory */
  $key_value_factory = \Drupal::service('keyvalue');
  $field_map_kv_store = $key_value_factory->get('entity.definitions.bundle_field_map');
  $map = $field_map_kv_store->get($entity_type);
  // Remove the field_dates field from the bundle field map for the page bundle.
  unset($map[$field_name]['bundles'][$bundle]);
  $field_map_kv_store->set($entity_type, $map);
}?>

Аватар пользователя kovalevm kovalevm 2 декабря 2019 в 13:21

Вот здесь нашел возможно нужную инструкцию.
https://www.drupal.org/docs/8/api/migrate-api/executing-migrations
Помогите, пожалуйста, понять, какие бандлы нод необходимо добавить и где это можно сделать в админке?
Есть еще вариант, что тут /admin/structure/migrate, но тоже не разберусь никак.

Аватар пользователя kovalevm kovalevm 2 декабря 2019 в 19:43

Есть еще мысль: https://www.drupal.org/project/drupal/issues/3005718
Ошибка возникла из-за комментариев, которые должны переноситься после миграции нод.
Буду очень благодарен, если поможете решить вопрос, как настроить, чтобы первыми переносились пользователи и ноды.

Аватар пользователя kovalevm kovalevm 3 декабря 2019 в 18:27

Подскажите, пожалуйтса, статью, где подробно, лучше на русском рассказывают, как добавить нужные бандлы.
К примеру, вот с такой ошибкой:

Missing bundle entity core/lib/Drupal/Core/Entity/EntityType.php:914)
Source ID node,news,field_picture: Missing bundle entity, entity type node_type, entity id comment_node_news. (/core/lib/Drupal/Core/Entity/EntityType.php:914)

И с такой:

Source ID og_membership,og_membership_type_default,default,og_membership_request: Missing bundle entity, entity type og_membership_type, entity id og_membership_type_default. (/core/lib/Drupal/Core/Entity/EntityType.php:914)

Аватар пользователя kovalevm kovalevm 3 декабря 2019 в 21:12

Или вот такая ошибка:

A non-existent config entity name returned by FieldStorageConfigInterface::getBundles(): entity type: node, bundle: comment_node_fgame, field name: field_link_download

Аватар пользователя kovalevm kovalevm 4 декабря 2019 в 9:39

Похоже, что нет. Как можно указать, чтобы выполнилась их миграция?
Сейчас по окончанию миграции вот такое сообщение:

4 upgrades failed
Процесс обновления не закончен

В логах ошибок:

Operation on Comments failed
Operation on User accounts failed
Operation on Simplenews subscribers failed
Operation on Voting API Votes failed

Аватар пользователя gun_dose gun_dose 4 декабря 2019 в 9:42

kovalevm wrote:
Как можно указать, чтобы выполнилась их миграция?

Самый надёжный способ - это создать её и выполнить.

Аватар пользователя kovalevm kovalevm 4 декабря 2019 в 10:08

Установлены модули Migrate Tools, Migrate Plus. Помогите, пожалуйста, с инструкцией для создания необходимых настроек миграции.