# 一些周年徽章在最后一个周年徽章后一天天和一年后颁发

**URL:** <https://meta.discourse.org/t/some-anniversary-badges-are-awarded-one-day-and-one-year-after-the-last-anniversary-badge/325533>\
**Category:** Bug\
**Tags:** badges, pr-welcome\
**Created:** [2024年九月8日 18:52 UTC](https://meta.discourse.org/t/some-anniversary-badges-are-awarded-one-day-and-one-year-after-the-last-anniversary-badge/325533 "2024-09-08T18:52:37Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2024年九月12日 03:51 UTC](https://meta.discourse.org/t/some-anniversary-badges-are-awarded-one-day-and-one-year-after-the-last-anniversary-badge/325533/3 "2024-09-12T03:51:49Z")

</div>

这是一个 bug，但我认为这是一个“欢迎 PR”的 bug。我们的设计是：

1. 每天我们会寻找新用户来授予周年纪念徽章。
2. 我们只考虑在过去一年中 **未** 获得周年纪念徽章的用户。

问题是……这个任务每天只运行一次，而且是在一个任意的时间点运行。这意味着任务总是会延迟，有时延迟一小时，有时延迟 23 小时。

鉴于我们每天只授予一次徽章，我们需要将逻辑更改为：

1. 寻找候选人
2. 设置 `created_at:` 为正确的偏移量，而不是使用 `end_date`

> <https://github.com/discourse/discourse/blob/1f1709d249cf282baf532b7dd6c599d0e9c88b6a/app/jobs/scheduled/grant_anniversary_badges.rb#L14-L19>

这并非不可能修复，但有些棘手。

---

_[View the full topic](https://meta.discourse.org/t/some-anniversary-badges-are-awarded-one-day-and-one-year-after-the-last-anniversary-badge/325533)._
