사용자 병합 실패, 서드파티 플러그인으로 인한 손상된 데이터베이스 항목

OK, 가져오는 중… 연결 문제가 있습니다. 동작하는지 확인하기 위해 safe_mode를 사용해 보겠습니다.
Safe-mode는 도움이 되지 않습니다…

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/discourse/discourse-bbb.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/discourse/discourse-canned-replies.git
          - git clone https://github.com/discourse/discourse-checklist.git
          - git clone https://github.com/discourse/discourse-code-review.git
          - git clone https://github.com/discourse/discourse-footnote.git
          - git clone https://github.com/discourse/discourse-github.git
          - git clone https://github.com/discourse/discourse-graphviz.git
          - git clone https://github.com/discourse/discourse-math.git
          - git clone https://github.com/discourse/discourse-policy.git
          - git clone https://github.com/discourse/discourse-prometheus.git
          - git clone https://github.com/discourse/discourse-prometheus-alert-receiver.git
          - git clone https://github.com/discourse/discourse-push-notifications.git
          - git clone https://github.com/discourse/discourse-saved-searches.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-yearly-review.git
          - git clone https://github.com/angusmcleod/discourse-events.git
          - git clone https://github.com/angusmcleod/discourse-locations.git
          - git clone https://github.com/davidtaylorhq/discourse-whos-online.git

마지막 몇 개의 URL을 업그레이드할 수 있다는 것을 이미 확인했습니다. (하지만 재빌드는 UTC 기준 자정쯤, 즉 오늘 밤에만 가능합니다)
events와 locations 관련해서는 @angus 또는 @merefield에게 메시지를 보내보겠습니다.

discourse-assign 플러그인일 가능성이 높습니다. 목록에서 TopicQuery 클래스를 수정하는 유일한 플러그인이기 때문입니다. 그리고 오류가 바로 그 부분에서 발생한다고 추정합니다.

플러그인을 비활성화한 후 카테고리가 정상적으로 작동하는지 확인해 주시겠어요? 이후에 다시 활성화하시면 됩니다. 또한 해당 주제의 사용자 정의 필드 중 병합된 사용자를 어떤 방식으로든 참조하는 필드가 있는지 확인하는 것도 도움이 될 것입니다. 이 부분도 확인해 주시겠어요?

./launcher enter app
rails c

id_of_problematic_topic = 123
Topic.find(id_of_problematic_topic).custom_fields

discourse-assign를 비활성화한 후:

  • latest는 작동합니다
  • top은 작동하지 않습니다
  • /t/951도 여전히 작동하지 않습니다

쿼리를 실행해 보니… 아! 정확히 맞췄네요!

 {"event_start"=>1601748000, "event_end"=>1601749800, "event_all_day"=>false, "event_timezone"=>"Etc/UTC", "event_rsvp"=>true, "event_going_max"=>100, "event_version"=>1, "event_going"=>[36, 50]}

사실상 이벤트 플러그인이 병합 과정에서 건너뛰어지는 것 같습니다. 하지만 우리가 실행 중인 것이 구버전이기 때문일 수도 있습니다. 이 케이스를 테스트하는 데 도움이 필요하시면 말씀해 주세요.

이 문제를 해결해 주셔서 감사합니다 @gerhard!

해당 토픽의 커스텀 필드를 업데이트하여 존재하지 않는 ID를 제거할 수 있습니다. @angus가 자신의 플러그인에 사용자 병합 지원 기능을 추가하고 싶어 할 수도 있습니다.

기록을 위해:

tcf = TopicCustomField.where(topic_id: problematic_topic_id)
c = tcf.last # 제 경우엔, YMMV
 c.value = "[295,50]"
c.save

후에 참고를 위해, 해당 주제에 여러 개의 커스텀 필드가 있는 경우 다음을 사용해야 합니다:

tcf = TopicCustomField.where(plugin_name: 'discourse-events', topic_id: problematic_topic_id)
c = tcf.first
c.value = "[295,50]"
c.save

@hellekin 님, Creating and managing events 로 마이그레이션하는 것을 권장합니다.

사실, @fzngagan 님과 함께 Events에서 Discourse Events로의 마이그레이션 스크립트를 작업해 보시는 것은 어떨까요? 실제로 작업할 사례가 있으면 좋을 것 같습니다. Faiz 님, 이 작업에 우선순위를 두어야 합니다. Events를 공식적으로 비추천(deprecate) 상태로 전환하고 싶습니다.

@angus, @fzngagan: 컨테이너 설정에서 플러그인 줄을 수정하고, 다시 빌드한 다음 스크립트 실행까지 제가 처리해도 될까요? who’s who와 wizards의 git 저장소도 함께 변경해야 해서 한꺼번에 처리할 수 있을 것 같아요. 다만 지금은 해커톤이 진행 중인 중이라, 문제가 해결된다면 일주일 정도 기다려도 괜찮을 것 같습니다.

@hellekin
최근에 사용자 삭제 시 문제가 발생하던 비슷한 문제를 해결한 적이 있습니다.

Creating and managing events 로 마이그레이션하는 아이디어를 좋아합니다. 그렇다면 만료된 이벤트를 유지하길 원하시나요? 그리고 다가오는 이벤트가 몇 개나 있나요?

@fzngagan @hellekin 세부 사항을 파악하기 위해 대화를 여기로 옮길 수 있습니다: Pavilion

마이그레이션 스크립트 작업에 참여하겠습니다.

저는 Events를 많이 사용하는 사용자입니다. 행동 장애가 있는 어린이를 위한 학교용 플러그인을 개발했는데, 여러 사이트에서 10명 이상의 어린이를 대상으로 하루에 7개의 주제를 생성하고 있으며, 2년 넘게 안정적으로 운영되고 있습니다. 각 주제는 학교 하루 일과의 특정 구간을 나타내며, 주제 이벤트 날짜별로 조회할 수 있어야 하므로 Discourse Events가 데이터를 적절한 위치에 저장하기를 바랍니다.

아래에서 언급하신 토론에 바로 참여하겠습니다.

이 훌륭한 협력을 볼 수 있어 정말 기쁩니다. 저는 Discourse의 이런 점이 정말 좋습니다! 모두의 노력과 참여에 진심으로 감사드립니다 :heart:

네, 과거 이벤트를 유지하고 싶습니다. 주제와 관련이 있기 때문이죠. 특히 현재 진행 중인 ActivityPub 컨퍼런스 2020과 관련된 이벤트들이 그렇습니다. 이번 주는 해커톤 기간입니다.
이외의 이벤트는 많지 않지만, 마이그레이션에 대해 읽어볼 예정입니다. 이번 주는 이미 일정이 꽉 차 있어 아마 다음 주에 할 것 같습니다. 감사합니다! 그리고 @aschrijver 님이 말씀하신 대로, Discourse 커뮤니티는 정말 최고입니다!