Как принудительно выдать все бейджи через командную строку?

Значки выдаются один раз в день.
Существует ли способ запланировать или принудительно запустить процесс выдачи «прямо сейчас» из командной строки?

Самый простой способ — перейти по адресу /sidekiq/scheduler и найти любые задачи, в названии которых есть слово «grant». Скорее всего, вам нужна задача Jobs::BadgeGrant, но у некоторых бейджей есть свои собственные задачи.

Я проверил все запланированные задачи в Sidekiq на ближайшие 24 часа, и ни одна из них не содержит токена grant.

Ох… странно. Значит, вы не видите строку вроде этой?

Это тестовый сервер или продакшн?

Это на продакшене forum.kozovod.com.
Верно, записей нет, как на вашем скриншоте.

Я только что заметил, что мне давно не выдавались бейджи. Сейчас пересобираю контейнер и проверю, будет ли задача запланирована после перезапуска.

Также я заметил, что у одного из моих бейджей на основе кастомного SQL была ошибка — не могло ли это остановить работу всех остальных бейджей?

В теории, нет.

Скорее всего, проблема в неудачном обновлении docker-manager, из-за чего некоторые задания sidekiq не загрузились. Надеюсь, после пересборки всё заработает.

Хорошо, пересборка прошла успешно.

Однако через несколько минут после её завершения я всё ещё не могу найти ни одного токена grant среди 125+ запланированных задач. Это значит, что в моём окружении что-то не работает?

Да, скорее всего. Есть ли у вас какие-либо ошибки в /logs? Какие-либо необычные плагины?

Хм, за последние ~20 минут ничего критичного:

Вы видите что-то подозрительное, что может нарушить выполнение или планирование бейджей?

Ничего очевидного не видно. Если вы откроете консоль и введете Jobs::BadgeGrant, что произойдет? Должно выглядеть так:

[1] pry(main)> Jobs::BadgeGrant
=> Jobs::BadgeGrant

Хорошо, вот он:

После этого новых ошибок в /logs не появилось.

Также нет новых записей с токеном grant в /sidekiq/scheduled

Есть ли у вас какие-либо плагины, которые могут мешать работе?

Вот включённые плагины — я стараюсь использовать только популярные и поддерживаемые:

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/discourse/discourse-staff-notes.git
          - git clone https://github.com/joebuhlig/discourse-feature-voting.git
          - git clone https://github.com/discourse/discourse-checklist.git
          - git clone https://github.com/discourse/discourse-cakeday.git
          - git clone https://github.com/discourse/discourse-saved-searches.git
          - git clone https://github.com/discourse/discourse-canned-replies.git
          - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/angusmcleod/discourse-locations.git
          - git clone https://github.com/discourse/discourse-adplugin.git
          - git clone https://github.com/angusmcleod/discourse-custom-wizard.git

Просто уточняю — вы смотрите в разделе «Запланированные» или «Планировщик»? Задачи бейджиков должны находиться в разделе Планировщик.

(Кстати, какое же запутанное название!)

Спасибо.
В разделе «Планировщик» я теперь вижу следующие задачи:

  • Jobs::GrantNewUserOfTheMonthBadges
  • Jobs::GrantAnniversaryBadges
  • Jobs::BadgeGrant

Все задачи планировщика отображаются в разделе «Повторяющиеся задачи».

Теперь вопрос: безопасно ли мне нажать кнопку «Запустить» и посмотреть, что произойдёт?

Отлично, это значительно упрощает решение задачи!

Да, кнопка триггера безопасна :slight_smile:

Спасибо, запускается.

В прошлый раз это заняло 10 тысяч секунд, так что проверю завтра утром.

Есть ли способ обработать одну конкретную значок? Может быть, через командную строку?

10 000 секунд — это много! На meta это занимает 500 секунд. Возможно, один из ваших запросов для пользовательских значков не очень эффективен? (именно поэтому мы по умолчанию отключаем функцию пользовательского SQL)

Спасибо, я быстро проверил запросы, немного исправил один, и теперь время выполнения составляет всего около 1000 секунд. Я также перенёс свой вопрос по оптимизации SQL в отдельную тему.

Вернёмся к бейджам — теперь всё работает, и все бейджи выданы. Спасибо за вашу помощь и оперативные ответы.