У меня возникла проблема с автоматизацией, которая должна запускаться в начале месяца. Несмотря на то, что она включена, она не запускается автоматически. Я не могу найти никаких логов или способа отладить, почему она не работает сама по себе, хотя должна. Кто-нибудь знает, как можно решить эту проблему?
Как видно ниже, автоматизация должна автоматически «Запланировать встречу с результатами Data Explorer» каждый месяц. Если я нажму «Запустить сейчас», всё работает как положено: пользователи, добавленные в список, получат результаты Data Explorer, а также CSV-файл. Однако автоматический запуск не работает.
Проводили ли вы какие-либо тесты, чтобы убедиться, что все критерии выполняются естественным образом (кроме trigger now)?
То есть, установите время выполнения ежедневно и направьте результат в тестовую группу. Если всё работает корректно, перейдите к ежемесячному выполнению для вашей реальной группы.
Также я полагаю, что ваша целевая аудитория должна иметь доступ к запросу в Data Explorer.
Да.. но проблема не в том, что задача не выполняется в запланированную дату/время, а в том, что она вообще не выполняется.
Где я могу найти эту кнопку, пожалуйста?
Ожидается, что система отправит прямое личное сообщение двум пользователям. Пользователям передан общий запрос. Спасибо за предложение протестировать, изменив расписание. Я также попробую поэкспериментировать с тестовой группой.
Главное отличие, которое я заметил, заключается в том, что в вашем интерфейсе не отображается, когда должно сработать следующее автоматическое действие.
Я использую этот самый сценарий автоматизации в нескольких местах без проблем. Вот как выглядит моя конфигурация в одном из них — для этого теста я изменил периодичность на 5 минут вместо недели, но при установке недельного интервала она срабатывает еженедельно, как и ожидалось:
Попробуйте, возможно, убрать эмодзи «ручки управления» из имени скрипта и заголовка запроса в Data Explorer. Это может нарушать структуру полезной нагрузки (хотя, кажется, они должны быть допустимы).
Спасибо за помощь! Боюсь, что загадка всё ещё не разгадана… вот почему:
До «даты запуска» всё выглядело именно так, с сообщением «Следующий запуск автоматизации будет в: [дата/время]»; однако после того, как это дата/время прошло без успешного выполнения, сообщение исчезло. Во время тестирования я изменил интервал на 1 минуту, и сообщение о запуске снова появилось. В прошлом месяце, когда автоматизация не сработала, я обновил таймер, и появилось сообщение о том, что запуск произойдёт в первый час следующего месяца (но этого не случилось).
На самом деле она работала и срабатывала в некоторые месяцы, но не в другие, поэтому причина неясна, но теперь, похоже, она больше никогда не активируется автоматически. Какая у вас версия Discourse? У меня 2026.5.0-latest…
К сожалению, даже при ручном запуске в /logs ничего не появляется. (У меня выбраны все опции).
Я не думаю, что это проблема, потому что я изменил триггер на 1 минуту, и сообщение было отправлено:
Хорошо, я установил период в один месяц, запустил тест, и всё сработало. Но ждать целый месяц ради проверки здесь не очень практично. Я попробую изменить дату запуска через пару минут.
редактирование: ежемесячный запуск, похоже, работает у меня.
Окей, так сегодня я и Мойн обсуждали этот случай, и она упомянула, что, возможно, есть баг при использовании параметра «ежемесячно», поскольку длина месяца варьируется? Конечно, она была права — отчасти…
В любом случае, я немного покопался
Мне не удалось найти скрипт автоматизации для schedule pm with data-explorer results в основной папке plugins/automation/lib/discourse_automation/scripts, значит, он где-то спрятан.
Однако я посмотрел на логику здесь для повторяющихся событий (предположительно, этот скрипт использует её) в файле plugins/automation/lib/discourse_automation/triggers/recurring.rb:
Я думаю, что базовый код для ежемесячных повторяющихся автоматизаций вычисляет N-й день недели вместо фактической календарной даты, и здесь возникает несоответствие логики с параметром Calendar day — при внедрении BYDAY=#{count}#{byday} в RRule автоматизация принудительно привязывается к дню недели, тогда как следовало бы использовать BYMONTHDAY вместо BYDAY.
Так, если вы настроите автоматизацию на запуск 15 апреля (который, кстати, является 3-й средой апреля), система интерпретирует правило как: запускать в 3-ю среду каждого месяца.
Когда наступает май, 3-я среда — это 20 мая, из-за чего расписание сдвигается на 5 дней.
Более того, если вы установите автоматизацию на 30-е или 31-е число месяца (например, «5-я вторник»), система будет искать 5-й вторник в следующем месяце. Если в этом месяце всего 4 вторника, автоматизация полностью не сможет найти валидную дату и тихо пропустит весь месяц.
У меня есть протестированное исправление, и я готовлю PR, если команда захочет его проверить. Оно меняет логику с N-го дня недели на точную календарную дату.
Вот несколько скриншотов моих тестов и отладки:
Два экземпляра: один без исправления, другой с моим исправлением логики.
Создайте идентичную автоматизацию в обоих (исправленная версия справа):
Обратите внимание на различия в баннерах с сообщением «Следующая автоматизация сработает в:» — сдвиг составляет 5 дней: неотредактированная версия смещается к третьей среде (20 мая), вместо 15 мая.
Например, месяцы могут полностью пропускаться, если система ищет 4-й четверг вместо конкретной даты.
Редактирование: похоже, что баг затрагивает любой скрипт автоматизации, использующий триггер recurring, настроенный на запуск каждый месяц.
Я также могу воспроизвести иногда пустой баннер, например, если установить дату начала на 29 апреля 2026 года, то система не сможет найти 5-ю среду в мае, так как её не существует — автоматизация не сработает здесь (неисправленная версия слева, исправленная справа):
Похоже, что баг вызывает NoMethodError в Rails, когда не удаётся найти N-й день недели, как в примере выше; отсюда пустой баннер следующего запуска и сбой выполнения:
Просто отмечу, что в процессе отладки у меня возникла мысль, что текущее поведение может быть намеренным (учитывая, что тесты спецификации были настроены с «плавающими» днями). Однако я считаю, что администраторы, настраивающие эту автоматизацию, скорее всего, ожидают календарный месяц, а не «N-й день месяца». Пропуск месяцев в автоматизации, когда не удаётся найти N-й день месяца, является проблематичным.
edit: только что добавил исправление для граничного случая и тесты спецификации для ситуации, когда не удаётся найти точное совпадение даты на следующий месяц — в таком случае берётся последний день месяца (например, 31 января → 28 февраля). Также учтён високосный год.
Большое спасибо за то, что занялись этим вопросом. Не знаю, было ли ваше исправление уже включено в основную версию и решит ли оно проблему с датами месяца. Однако, полагаю, что если я обновлю триггер для каждого месяца отдельно, всё должно сработать, верно?
Иными словами, мне нужно будет вручную обновлять триггер на конкретный день каждого месяца, и тогда он сработает. Если я правильно понял, проблема заключалась в том, когда система пыталась выбрать день самостоятельно. Надеюсь, ваше исправление решит эту проблему… Вижу, что бот для пакетной обработки доставил вам некоторые трудности, но надеюсь, что всё пройдёт хорошо. Ещё раз спасибо за вашу помощь!
Извините, мой PR ещё не принят и находится в ожидании финальной проверки от участника команды. На данный момент вы можете попробовать обновить триггер, указав другую дату. Просто убедитесь при настройке, что всплывающее сообщение «следующий запуск триггера» показывает правильную следующую ежемесячную дату запуска.