транзакционной публикации, откатить и пользовательские Deployer модули взаимодействия


4

У меня есть следующий сценарий/дилемма:

В настоящее время у меня есть два пользовательских модули (для развертывания и свёртывания) в процессорах Deployer по умолчанию. Их целью является добавление или обновление некоторых данных (публикация, идентификатор элемента, URL, опубликованный статус и т. Д.) Страницы, которая (un) публикуется в пользовательской базе данных. Эта база данных позже используется для создания sitemaps, поэтому опубликованные состояния всех страниц должны быть на 100% точными. Пользовательские модули добавляются после развертывания модулей по умолчанию (un), поэтому, если возникает ошибка, они не будут выполняться.

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

Для решения этой проблемы Я думал о добавлении настраиваемых модулей к процессорам с атрибутом «phase», установленным в «post-transaction», но я не уверен, что это правильный подход. В документации указано, что откат может быть инициирован «вплоть до фазы предварительной транзакции», поэтому я предполагаю, что это подходящий момент для обновления баз данных Sitemap. Может ли кто-нибудь проверить, правильно ли это, или предложить другой? Кроме того, я не уверен в том, как протестировать этот сценарий, а именно, как вручную привести к тому, что один пункт назначения завершится с ошибкой, чтобы вызвать откат.

1

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

У нас есть аналогичная реализация, использующая пост-транзакцию, и она работает нормально.