Yearly Review插件不断创建新主题

您好!

我的论坛上创建了一个年度回顾。该主题被重命名了,由于年度回顾插件会检查相同的标题名称以确定是否需要创建新的年度回顾,因此它在 24 小时后又创建了一个。

我删除了新的那个,并将第一个重命名为默认标题。

但是,插件在 24 小时后仍然会创建新的主题。

这是数据浏览器返回的内容:

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: 它实际上创建了 3 次新的主题,可能是因为标题中的引号和花体引号[^1]之间存在差异,所以我不得不这样做,因此日期相差 3 天,并且只有 2 个结果,但我只想保留第一个创建的主题。

有什么办法可以解释为什么插件在存在具有默认标题的主题的情况下仍然继续创建主题,以及如何阻止它这样做?如果我在 2023 年底禁用它然后重新启用它会怎样?它会在我重新启用它 24 小时后创建一个主题吗?
此外,这也不是最优雅的解决方案,所以我想知道问题到底出在哪里 :thinking:

在问题确定并阻止创建新的年度回顾之前,我将禁用该插件几天/几周。

[^1]:请参阅此处的轶事:A few questions about the yearly review plugin

1 个赞

您是否还将作者更改为其他用户?
代码正在查找由系统用户创建的具有该标题的主题。

1 个赞

您好!
我是联合管理员。我只更改了名称,并未更改作者。
如果存在两个同名且作者为系统用户的帖子,会怎样?它会取最后一个吗?

1 个赞

它不会“采用”一个,它会检查是否存在这样的主题,如果不存在,它就会创建一个。
如果有一个或两个(或 999 个),它就不会创建一个新的。

2 个赞

所以,某个地方出了问题,因为它一直在创建新主题,而一个已经存在 :thinking:

1 个赞

正如 @Maxence_C 所说,只更改了标题,所以作者仍然是 @system

据我所知,这个条件满足。 :person_shrugging:

3 个赞

您是更新了 yearly_review.topic_title,还是仅仅重命名了该主题?

1 个赞

我们刚刚重命名了第一个年度回顾主题的标题,并在其创建 24 小时后将其重命名回默认名称。
我们没有更改 yearly_review.topic_title

3 个赞

如果主题的标题与主题最初发布时设置的标题完全匹配,则应通过以下代码阻止发布新的审阅主题:

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

除非问题的原因是标题不完全匹配,也许问题与主题以法语发布有关。了解作业运行时此处设置的 title 是什么将会很有帮助:

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

我想知道它是否正在尝试将英文标题与法文标题进行匹配。法语是您的网站上的默认区域设置吗?

编辑:如果主题是以法语标题发布的,那么上面的代码中的 title 必须是以法语设置的。因此,这不太可能是问题的原因。

4 个赞

它们是相同的,除非我错过了主题数据浏览器返回的两个主题之间的一个微小差异。如果需要,我可以提供更多数据。

我应该在 rails 控制台还是其他地方运行它?

是的,是。


我将重新启用该插件以再次检查,看看在创建下一个年度回顾(如果还有的话)时是否能收集到更多信息。

2 个赞

嗯,我手动触发了该作业,它创建了一个主题。再次触发它不会创建新的年度审查。

我可以将第一个主题的回复移到新主题,然后删除第一个主题,这样就可以绕过这个问题。

但我非常想知道这里发生了什么,以及为什么尽管我在数据库中看到了内容,但要求似乎仍未满足。

1 个赞

我也是。我不确定发生了什么,但似乎这个检查现有主题的功能有点不稳定:

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

我想知道 Discourse 团队是否有人对如何改进它有什么想法。

不得不禁用插件以防止创建多个主题并不是一个好方法。该插件加载了一些用于设置其主题样式的 CSS。如果禁用了该插件,我认为 CSS 将不会被加载。

2 个赞

仅供参考:插件已更新为新的法语翻译,因此今天创建了另一个新的年度回顾 :sweat_smile:
我复制了这个新主题的标题,删除了它,并通过粘贴标题重命名了原始主题。
我们明天看看它是否会因为我复制粘贴原始标题而创建一个新主题。

3 个赞

感谢您对此事的跟进。依赖主题标题来防止创建多个审核主题是一种非常不可靠的方法(这是我的错。)一月份结束后,这个问题明年才不会再出现。@JammyDodger,也许您可以向 Discourse 团队传达一个建议,让他们研究出一种更好的方法来防止创建多个主题。这应该在 2024 年 1 月之前完成。时间过得真快 :slight_smile:

9 个赞

我认为我可以做到。 :slight_smile: :+1:

5 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.

只是一个小更新,我认为这应该已经解决了::partying_face:

1 个赞