해결책은 바로 위에 있는 게시물에 있습니다. ![]()
스크립트를 수정해야 합니다. 모두를 위해 이 문제를 해결하는 PR을 만들어 주실 수 있을까요?
해결책은 바로 위에 있는 게시물에 있습니다. ![]()
스크립트를 수정해야 합니다. 모두를 위해 이 문제를 해결하는 PR을 만들어 주실 수 있을까요?
감사합니다, 해결되었습니다. 그 점 죄송합니다. 읽기 실수로 인한 벌로, 다른 사람들이 어리석은 질문을 하는 수치를 겪지 않도록 Added duplication to name to prevent modification of frozen string exception - Pull Request #30325 - discourse/discourse - GitHub 를 열었습니다.
이 가져오기 스크립트는 Discourse가 Mailman 2의 이메일 스레딩 방식을 어떤 방식으로든 재현합니까(예: "In-Reply-To"를 나타내기 위해 Discourse의 작은 화살표를 사용하는 것 등)? 아니면 단순히 시간 순서대로만 정렬됩니까(각 스레드는 Message-ID, In-Reply-To 및 References를 기준으로 구성됨)?
네, 맞습니다
좋아요. 메일링 리스트에서 받은 이메일 중 일부에 In-Reply-To와 References 헤더가 누락되어 있어서, 단순한 답장이 아니라 새로운 주제로 가져와질 수 있습니다. 기억이 정확하진 않지만, 스크립트는 이 헤더들 중 하나 또는 Subject 헤더를 사용합니다(둘 다 사용하지 않음).
오래전에 이 질문을 한 적이 있었던 것 같은데, MBOX 파일에 이러한 헤더를 수동으로 추가하거나 Discourse로 가져오기 전후로 이메일 순서를 재배열할 수 있는 비수동적인 방법이 있을까요?
요즘은 주제(topic)를 병합하면서 시간 순서를 유지할 수 있으므로, 이것이 해결책일 수도 있습니다. 다만 메시지가 답장으로 보낸 대상임을 나타내는 작은 Discourse 화살표는 누락될 것입니다.
mbox 가져오기 스크립트는 두 단계로 구성됩니다. 첫 번째 단계는 인덱싱이며, SQLite 데이터베이스를 출력합니다. 가져오기 전에 SQLite 데이터를 수정하거나, Ruby 스크립트를 수정할 수 있습니다.
제목이나 헤더로 정렬/그룹화하는 모든 로직은 다음 위치에서 처리됩니다:
이메일을 어떻게 그룹화할지 알고 있다면, 자체 그룹화 로직을 추가할 수 있습니다.
이렇게 복잡한 것을 고려하기까지는 시간이 좀 걸릴 것 같아요!
https://bazaar.launchpad.net/~mailman-coders/mailman/2.1/view/head:/Mailman/Archiver/pipermail.py#L669 에서 Mailman 2의 Pipermail은 우선순위에 따라 다음 항목들을 찾는 것 같습니다:
이러한 접근 방식의 조합은 이상적으로 보입니다. 세 번째 경우라면, Discourse가 “답장” 화살표를 사용하지 않는 것이 더 합리적일 수 있습니다.
기억이 맞다면, Mailman 3의 Hyperkitty는 제목을 전혀 고려하지 않았는데, 이는 이전 방식만큼 좋지 않았습니다.
실례가 안 된다면, 좀 멍청한 질문일 수 있지만 여기를 둘러봐도 명확한 답을 찾지 못해서 여쭤봅니다. 각 이메일마다 중복을 제거하면서 새로운 Discourse 사용자를 생성하는지, 아니면 모두 하나의 시스템 사용자로 들어가는지 알고 싶습니다. 20년치 게시글이 있는 메일링 리스트를 가지고 있는데, 꽤 크고 실험하기도 어렵습니다. 그리고 원래 리스트 안의 답글은 어떻게 처리되나요? 스레드로 정리되나요?
네, 이메일 주소별로 사용자가 하나씩 생성됩니다.
Google Groups의 데이터를 Google Takeout으로 내보낸 뒤, .mbox 파일을 업로드하고 가져오기를 수행했습니다.
data/folder를 기존 카테고리에 매핑하는 데 이 단계들이 도움이 되었지만, 이 작업은 import 컨테이너에서 수행해야 합니다. 이 글처럼 app 컨테이너에서 수행하면 안 됩니다:
./launcher enter import
rails c
# URL에 표시된 카테고리 ID를 사용하세요. 예를 들어
# 카테고리 경로가 /c/soccer/16처럼 보이면 ID는 16입니다.
category = Category.find(16)
# mbox 파일이 저장된 디렉터리 이름을 사용하세요. 예를 들어,
# 파일이 import/data/foo에 저장되어 있다면 디렉터리 이름으로 "foo"를 사용해야 합니다.
category.custom_fields["import_id"] = "soccer"
category.save!
이미 Discourse에 자체적으로 마이그레이션한 사용자들이 있어, 가져오기 스크립트가 이 사용자들의 연락처를 생성하지 못했습니다(아마도 나쁜 일은 아닐 것입니다). 하지만 이 기존 Discourse 사용자가 관여한 가져온 메시지들은 발신자가 이름 대신 system으로 표시됩니다.
기존 사용자를 가져온 메시지에 매핑하는 방법이 있을까요?
아직까지는 최근 백업에서 복원하여 모든 것을 되돌렸습니다. 기존 Discourse 사용자와 그들의 가져온 메시지를 처리하는 방법에 대한 지침을 얻어 다시 시도할 준비가 되어 있습니다.
업데이트:
Claude가 기존 사용자 매핑 문제를 해결하는 데 도움을 주었습니다. 위 코드 외에 다음 루프를 rails 콘솔에서 실행해야 합니다:
User.where("id > 0").find_each do |u|
email = u.email.downcase
unless u.custom_fields["import_id"].present?
u.custom_fields["import_id"] = email
u.save_custom_fields
end
end