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 ↩︎

저자도 다른 사용자로 변경하셨나요?
코드는 시스템 사용자가 생성한 해당 제목의 주제를 찾습니다.

안녕하세요!
저는 공동 관리자입니다. 이름만 변경했고, 작성자는 변경하지 않았습니다.
같은 이름의 게시물이 두 개 있고, 작성자가 시스템 사용자인 경우 어떻게 될까요? 마지막 게시물을 가져올까요?

그것은 하나를 “가져오지” 않습니다. 해당 주제가 존재하는지 확인하고, 존재하지 않으면 하나를 생성합니다.
하나나 두 개(또는 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은 프랑스어로 설정되고 있어야 합니다. 따라서 이것이 문제의 원인이 될 가능성은 낮습니다.

두 토픽 데이터 탐색기가 반환한 데이터에서 아주 작은 차이를 놓쳤을 수 있지만, 둘은 동일합니다. 필요하면 더 많은 데이터를 제공할 수 있습니다.

이를 rails 콘솔에서 실행해야 하나요, 아니면 다른 곳에서 실행해야 하나요?

네, 맞습니다.


다음에 생성되는 연간 리뷰(만약 있다면)에 대해 추가 정보를 수집할 수 있는지 확인하기 위해 플러그인을 다시 활성화하겠습니다.

글쎄, 제가 작업을 수동으로 실행했는데 토픽이 생성되었습니다. 다시 실행해도 새로운 연간 리뷰는 생성되지 않습니다.

첫 번째 토픽의 답변을 새 토픽으로 옮기고 첫 번째 토픽을 삭제하면 문제를 우회할 수 있을 것 같습니다.

하지만 데이터베이스에서 확인되는 내용과 달리 요구 사항이 충족되지 않는 것처럼 보이는 이유와 여기서 정확히 무슨 일이 일어나고 있는지 매우 궁금합니다.

저도 마찬가지입니다. 무슨 일이 일어나고 있는지 정확히 모르겠지만, 기존 토픽이 존재하는지 확인하는 이 로직이 좀 불안정해 보입니다:

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

Discourse 팀에서 이를 개선하는 방법에 대한 아이디어가 있는지 궁금합니다.

여러 개의 토픽이 생성되는 것을 방지하기 위해 플러그인을 비활성화해야 하는 것은 좋은 접근 방식이 아닙니다. 이 플러그인은 토픽을 스타일링하는 데 사용되는 일부 CSS를 로드합니다. 플러그인이 비활성화되면 해당 CSS가 로드되지 않는다고 생각합니다.

참고로: 플러그인이 새로운 프랑스어 번역으로 업데이트되었기 때문에 오늘 또 새로운 연간 리뷰가 생성되었습니다 :sweat_smile:
새로 생성된 토픽의 제목을 복사한 뒤 삭제하고, 원래 토픽의 이름을 붙여넣기 방식으로 변경했습니다.
원본 제목을 복사-붙여넣기 했음에도 불구하고 내일에 새로운 토픽이 생성될지 지켜보겠습니다.

이 문제에 대해 후속 조치를 취해 주셔서 감사합니다. 토픽 제목에 의존하여 여러 리뷰 토픽이 생성되는 것을 방지하는 방식은 정말 불안정한 접근법입니다(이건 제 잘못입니다). 1월이 끝나면 이 문제는 내년이 될 때까지 다시 발생하지 않을 것입니다. @JammyDodger, 여러 토픽이 생성되는 것을 방지하는 더 나은 방법을 연구해 달라고 Discourse 팀에게 전달해 주실 수 있을까요? 2024년 1월 전에 해결되면 좋겠습니다. 시간이 정말 빠르게 가네요 :slight_smile:

저도 그렇게 할 수 있을 것 같습니다. :slight_smile: :+1:

작은 업데이트입니다. 이 문제는 다음으로 해결될 것 같습니다: :partying_face: