Рейтинг:1

Переопределение конфигурации приводит к непредсказуемым результатам

флаг nr

Я настраиваю разделение конфигурации с помощью Drupal 9 и получаю неожиданные результаты.

Ни одно из моих разделений не помечено как активное в активной конфигурации или экспортированной конфигурации YAML.

Я хочу установить локальное разделение по умолчанию в настройки.php а затем использовать settings.local.php переопределить его разработчик, стг, прд среды.

Моя локальная среда разработки — DDEV-Local v1.17.5. Все три удаленные среды настроены на одном удаленном сервере в частной AWS клиента, на трех разных виртуальных хостах Apache.

Я не могу использовать переменные среды, чтобы различать разработчик, стг, прд среды, поскольку все они находятся на одном хосте. Было непросто различать среды без обычных переменных среды Acquia или Pantheon.

(Примечание: я понимаю, если config_split здесь не по теме, так как это не основной модуль. Я создал очередь задач на Drupal.org, но я все еще надеюсь, что кто-то увидит здесь вопрос и предложит свое понимание.)

Это переопределение по умолчанию в настройки.php:

  $config['config_split.config_split.local']['status'] = TRUE;
  $config['config_split.config_split.prd']['status'] = FALSE;
  $config['config_split.config_split.stg']['status'] = FALSE;
  $config['config_split.config_split.dev']['status'] = FALSE;

Все идет нормально. Локальное разделение является «активным (перезаписанным)».

Все становится странно, когда я редактирую это, чтобы включить еще одно разделение в моей локальной среде:

  $config['config_split.config_split.local']['status'] = FALSE;
  $config['config_split.config_split.prd']['status'] = TRUE;
  $config['config_split.config_split.stg']['status'] = FALSE;
  $config['config_split.config_split.dev']['status'] = FALSE;

После редактирования настройки.php (и, конечно же, очистив кеш) раздел «Производство» «активен (перезаписан)», как и ожидалось.

К сожалению, локальное разделение также «активно (перезаписано)», несмотря на то, что его ['статус'] = ЛОЖЬ;,

Все становится еще более странным, когда я пытаюсь логически свести на нет значения всех разбиений:

  $config['config_split.config_split.local']['status'] = FALSE;
  $config['config_split.config_split.prd']['status'] = TRUE;
  $config['config_split.config_split.stg']['status'] = TRUE;
  $config['config_split.config_split.dev']['status'] = TRUE;

Теперь локальный раскол еще "активный (перезаписанный)", несмотря на то, что он установлен ['статус'] = ЛОЖЬ;,

Разделы Stage и Production являются «активными (перезаписанными)», чтобы соответствовать их ['статус'] = ИСТИНА;,

И разделение Dev остается «неактивным», несмотря на то, что его ['статус'] = ИСТИНА;,

Любая идея, что здесь происходит?

Рейтинг:1
флаг nr

Я изменил имена машин сплитов (например, dev_split) и все работает как положено.

Таким образом, проблема была вызвана acquia/blt пакет, который использует acquia/drupal-детектор среды package для установки активного разделения на основе переменных среды Acquia.

С $_ENV['AH_SITE_ENVIRONMENT'] не задано, разделение локальной среды всегда будет активным.

Я не уверен, почему сплит Dev нельзя активировать, но, вероятно, это тоже связано.

Я мог бы полностью удалить BLT из проекта, поскольку мы не используем хостинг Acquia, и, следовательно, мы больше не используем его, но мне не хотелось снова настраивать автоматизированное тестирование без всего этого совершенства Robo.

Вместо этого я сделал acquia/blt зависимость Composer dev, чтобы она не устанавливалась в более высоких средах. По-видимому, этого было недостаточно — он по-прежнему путается с моими разбиениями конфигурации и может иметь другие непредсказуемые побочные эффекты.

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

Закрыт (работает по назначению)

P.S.: Если ваш проект BLT размещен на Acquia, то определение окружения будет работать корректно, и этой проблемы не возникнет. Неудивительно, что это такая редкая проблема — большинство людей, вероятно, не используют BLT за пределами среды Acquia.

флаг za
В последнее время я имел дело с BLT, и да, включение настроек (наряду с Acquia) делает его довольно запутанным. Кроме того, если вы не создадите свой собственный детектор, есть только [dev, stage, prod, ci, ode, ah_other, local] — EnvironmentDetector#getEnvironments

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

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