Плагин The Yearly Review продолжает создавать новые темы

Привет!

На моём форуме была создана годовая сводка. Тема была переименована, и поскольку плагин годовой сводки проверяет идентичность заголовков, чтобы решить, нужно ли создавать новую годовую сводку, он создал ещё одну через 24 часа.

Я удалил новую, а первую переименовал обратно в заголовок по умолчанию.

Однако плагин продолжает создавать новые темы каждые 24 часа.

Вот что возвращает Data Explorer:

SELECT created_at, title, fancy_title
FROM topics
WHERE title like '%2022%année en cours de révision%'
AND deleted_at IS NULL
ORDER BY created_at DESC
created_at title fancy_title
2023-01-04T14:52:19.345Z 2022 : l'année en cours de révision 2022 : l’année en cours de révision
2023-01-01T10:09:20.503Z 2022 : l'année en cours de révision 2022 : l’année en cours de révision

:information_source: На самом деле он создал новые темы три раза, возможно, из-за различия между обычной кавычкой и красивой кавычкой[1] в заголовке, поэтому мне пришлось удалять лишние. Отсюда разница в датах в три дня и только два результата в запросе, но я хочу оставить только первую созданную тему.

Не могли бы вы подсказать, почему плагин продолжает создавать темы, несмотря на наличие существующей с заголовком по умолчанию, и как это остановить? Что, если я отключу его и включу снова в конце 2023 года? Создаст ли он тему через 24 часа после повторного включения?
Кроме того, это не самое элегантное решение, поэтому я хотел бы точно понять, в чём заключается проблема :thinking:

Я отключу плагин на ближайшие дни/недели, пока проблема не будет выявлена и предотвращено создание новых годовых сводок.


  1. См. анекдот здесь: A few questions about the yearly review plugin ↩︎

Вы тоже сменили автора на другого пользователя?
Код ищет тему с таким заголовком, созданную системным пользователем.

Привет!
Так, я со-админ. Я изменил только название. Я не менял автора.
Что будет, если есть две темы с одинаковым названием и системным пользователем в качестве автора? Система возьмет последнюю?

Он не «берёт» один, а проверяет, существует ли такая тема, и если нет, то создаёт её.
Если есть одна, две (или 999), то новая создаваться не будет.

Что-то где-то не так, потому что создаются новые темы, хотя одна уже существует :thinking:

Как сказал @Maxence_C, было изменено только заголовок, поэтому автором по-прежнему является @system.

Насколько мне известно, это условие выполняется. :person_shrugging:

Вы обновили поле yearly_review.topic_title или просто переименовали тему?

Мы переименовали заголовок первой темы ежегодного обзора, а затем вернули его к значению по умолчанию более чем через 24 часа после создания.
Мы не изменяли параметр yearly_review.topic_title.

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

return if Topic.where(user: Discourse.system_user, title: title).exists?

Если причина проблемы не в том, что заголовок не совпадает точно, возможно, проблема связана с тем, что тема публикуется на французском языке. Было бы полезно узнать, какое значение присваивается переменной title при выполнении задачи:

title = I18n.t("yearly_review.topic_title", year: review_year)

Возникает вопрос: не пытается ли система сопоставить английский заголовок с французским? Является ли французский язык локалью по умолчанию на вашем сайте?

Редактирование: если тема публикуется с французским заголовком, то переменная title в коде выше, должно быть, устанавливается на французском языке. Следовательно, это вряд ли может быть причиной проблемы.

Они идентичны, если только я не упустил крошечное различие в данных двух тем, которые вернул Data Explorer. При необходимости я могу предоставить дополнительные данные.

Мне следует выполнить это в консоли Rails или где-то ещё?

Да, является.


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

Что ж, я вручную запустил задачу, и она создала тему. Повторный запуск не создаст новый годовой обзор.

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

Но меня очень интересует, что здесь происходит и почему требования, казалось бы, не выполнены, несмотря на то, что я вижу в базе данных.

Я тоже. Не уверен, что происходит, но проверка на наличие существующей темы кажется немного ненадёжной:

return if Topic.where(user: Discourse.system_user, title: title).exists?

Интересно, есть ли у кого-то из команды Discourse идеи, как это улучшить.

Необходимость отключать плагин, чтобы предотвратить создание нескольких тем, — не лучший подход. Плагин загружает CSS, который используется для стилизации его тем. Если плагин отключён, я не думаю, что CSS загрузится.

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

Спасибо, что откликнулись на это. Полагаться на заголовок темы, чтобы избежать создания нескольких тем для обзора, — очень ненадежный подход (это моя ошибка). Как только январь закончится, эта проблема не возникнет снова до следующего года. @JammyDodger, возможно, вы могли бы передать сообщение команде Discourse, чтобы они подумали над более надежным способом предотвращения создания нескольких тем. Это следует сделать до января 2024 года. Время действительно летит :slight_smile:

Думаю, я могу это сделать. :slight_smile: :+1:

Небольшое обновление: я думаю, это должно быть решено благодаря :partying_face: