Рейтинг:0

Запустить хук обновления после того, как определенная конфигурация была импортирована?

флаг in

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

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

Типичные сценарии развертывания советуют сначала запустить updb, а затем cim с Drush. Это создает конфликт при попытке сделать это.

Пример скрипта развертывания пантеона:

если (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
  $статус = 0;
  $config_directory = имя_каталога(__FILE__) . '/конфигурация/по умолчанию';

  passthru("drush updb --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush cim --yes", $status);
  passthru("drush updb --yes", $status);
  passthru("drush cr", $status);

  если ($ статус == 0) {
    echo('Конфигурация импортирована, база данных обновлена.' . "\n");
  } еще {
    echo('Конфигурация не импортирована / база данных не обновлена. Команда Drush вернула ошибку.' . "\n");
  }
}

Есть ли лучший способ внести подобные изменения, которые запускаются только один раз, не вызывая сбоя сценария, подобного приведенному выше?

флаг cn
Единственный вариант, с которым я столкнулся в этих случаях, - это программно добавить поля в хук обновления до того, как вы установите данные. Импорт конфигурации для этих полей, по сути, станет бесполезным, но это означает, что вам не нужно менять свое развертывание.
флаг cn
Между прочим, Pantheon запускает updb и cim... интересное количество раз. Обычно вы делаете оба действия только один раз, как [drush делает] (https://www.drush.org/latest/deploycommand/)
Kevin avatar
флаг in
Это основано на том, что люди советовали для развертывания в прошлом - CIM исчерпан, updb запускается сначала перед cim, а затем в конце "на случай" требуются другие обновления. Я также никогда не находил никаких дополнительных обновлений, связанных с этим процессом, но на сегодняшний день он был довольно пуленепробиваемым для Pantheon и Acquia.
флаг cn
Не уверен, что это действительно имеет смысл - либо все обновления запускаются с первого раза, либо сборка должна завершиться неудачно. Единственный способ ввести новые обновления после `updb` — это изменить код, после чего происходит новое развертывание, и вы снова возвращаетесь к первому `updb`. Но это не совсем то, о чем ты спрашиваешь, так что я сейчас замолчу.
Kevin avatar
флаг in
Может дело в этом? https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Extension%21module.api.php/function/hook_post_update_NAME/9.2.x
флаг cn
Этот хук по-прежнему работает как часть updb, только в конце. Вам нужно либо изменить развертывание и сначала запустить cim, либо оставить развертывание прежним и сначала создать поля самостоятельно. Я не думаю, что был бы другой логичный вариант, хотя это случается со мной достаточно часто, и я был бы рад услышать о более простом решении.
sonfd avatar
флаг in
re первый комментарий @clive, я использовал что-то подобное в прошлом, чтобы импортировать конфигурацию в хук обновления, чтобы делать именно такие вещи: https://www.metaltoad.com/blog/programmatically-importing-drupal- 8 полей конфигурации
Рейтинг:3
флаг ph

Вы можете использовать drush deploy, который выполняет обновления в следующем порядке:

  1. Обновить хуки из module.install
  2. цим
  3. кр
  4. Разверните хуки из module.deploy.php

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

флаг cn
У этого та же проблема, что и у исходного кода развертывания OP — новая конфигурация не будет импортирована до того, как хук обновления попытается ее использовать.
Lambic avatar
флаг ph
Перемещение хука обновления в хук развертывания означает, что он запускается после импорта.
флаг cn
Ах да, у меня не получилось с первого раза. Возможно, стоит упомянуть о необходимости добавить (например) `passthru('drush deploy:hook', $status);`, если OP хочет запустить свой собственный скрипт вместо `drush deploy` напрямую

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.