Вы здесь

Миграция двумя классами в один материал

0

Делаю большую миграцию в ноду. Полей много, хостинг (друпала, а не источника) не справляется, БД ложится.

Вижу два выхода:
1.
Написать один класс, закомментить лишние запросы. Провести миграцию. После чего раскомментить одно, закомментить другое. Обновить миграцию.
Действенно, но не правильно.

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

Но здесь получается ситуация, при которой каждый класс создает новую ноду.

Собственно вопрос: как можно решить эту проблему? Как заставить классы миграции работать с одной и той же нодой? То есть первый класс миграции создает ноду, второй, третий и т.д. ее обновляют.

И еще вопрос, может есть третье решение?

Версия Drupal: 
7.x
Связанные проекты: 
Migrate
Вопрос задан 18.02.2016 - 13:06

Что значит "БД ложится"? Из-за чего конкретно ложится?

Комментарий оставлен 18.02.2016 - 13:24

Я делаю класс миграции.
При попытке его зарегистрировать получаю

PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

Если закомментить часть запросов, то класс отрабатывает без ошибок.
В обсуждении на Друпал.орг пишут, что надо увеличить max_allowed_packet.
Но на хостинге я это сделать не могу.

Комментарий оставлен 18.02.2016 - 13:41

уменьшите максимальное время выполнения миграции:

class ... extends Migration {
  public function __construct($arguments) {
    ...
    $this->timeThreshold = 0.5; // можно попробовать 0.1 или ещё меньше
  }
}
Комментарий оставлен 18.02.2016 - 13:53

Получаю такой ответ:

Migration ... could not be constructed.
SQLSTATE[HY000] [1040] Too many connections
Комментарий оставлен 18.02.2016 - 14:04

Ответы

0

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

Ответ дан 19.02.2016 - 13:33
0

Что касается второй части вопроса - как сделать так, что бы второй класс обновлял материал, а не создавал его заново: У миграции есть такое свойство systemOfRecord. И два допустимых значения: Migration::SOURCE и Migration::DESTINATION. Подробнее про них я как-то писал в статье http://frantsuzzz.com/content/migrate-import-materialov-kak-zhe-ty-vse-t...

Ответ дан 24.02.2016 - 09:32
-1

Мне кажется хостинг - очень спартанский, надо немного более либеральный найти :)

Ответ дан 19.02.2016 - 08:20