가져오기 "게시물을 매핑할 수 없음" 오류

수입 과정에서 약 1,000개의 게시물이 실패하고 있으며, 주요 오류는 "Failed to map post"인 것 같습니다. 예를 들어 다음과 같습니다.

Failed to map post for b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net
undefined method `hex’ for nil:NilClass

이것이 다음과 같은 오류 메시지와 함께 다른 많은 게시물의 실패를 유발하는 것으로 보입니다.

1109 / 65895 ( 1.7%) [400 items/min] Parent message b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net doesn’t exist. Skipping CAKPLMstp+CaTyfFinM-dHHpVxNHt0fy2vXT9Fx+21mE2RT-ijg@mail.gmail.com: A PCT approach to the “Power Law”

이를 해결하는 방법에 대한 조언이 있을까요?

저는 28년 치의 게시물을 가지고 있으며, 각 연도에 대한 폴더와 각 월에 대한 mbox 파일이 있습니다. mbox 파일에는 총 66,909개의 메시지가 있습니다. 그러나 수입 결과는 65,895개를 표시합니다. 수입 출력에 표시된 실패 건수 때문이 1,014개의 차이인가요?

해당 게시물들은 Aid4Mail을 사용하여 Eudora mbx 파일에서 표준 mbox 파일로 변환되었습니다.

“Parent message doesn’t exist” 오류는 421건을 확인했습니다.
“Failed to map post” 오류는 149건을 확인했습니다.

제 split_regex는 "^From .@. [0-9]{4}"이며, 다음과 같은 헤더에 적합한 것으로 보입니다.

From mmt-xxx@somedomain.net Wed Aug 10 12:06:53 2016

도와주세요! 이거에 대한 조언이 있을까요? :woozy_face:

지난주 다른 문제를 작업하는 중에 동일한 오류를 확인했습니다. 이번 주에 수정할 예정이며, 수정이 완료되면 여기에 업데이트를 게시하겠습니다.

이것들은 단순히 경고이며, 아마도 “Failed to map post” 오류로 인해 나타나는 것입니다. 메시지가 존재하지 않는 게시글을 참조할 때 발생합니다. 다른 문제를 수정하면 이 경고 대부분이, 혹은 전부 수정될 것이라고 확신합니다.

해당 오류는 FIX: Email attachments with a size of 0 bytes caused error · discourse/discourse@e84d88d · GitHub 에서 수정되었습니다

업그레이드 후 import를 다시 빌드하고 receiver.rb가 업데이트되었는지 확인한 뒤 import를 다시 실행했습니다.

덕분에 수백 건의 메시지가 해결된 것 같습니다.

하지만 여전히 약 200건이 다음과 같은 두 가지 유형의 실패로 인해 실패하고 있습니다:

Date is missing. Skipping bbe76bf7a9cab5a2ec2a06e6ef453555

Failed to map post for 23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net
Discourse::InvalidAccess

그리고 위에서 언급한 오류로 인해 발생하는 것으로 추정되는 “Parent doesn’t exist” 메시지도 많이 나옵니다.

이러한 오류가 발생하는 원인이 무엇인지 알 수 있을까요? 첫 번째 오류의 경우 mbx 메시지를 확인해 보았는데, 날짜가 누락된 흔적은 보이지 않습니다.

가져오기 스크립트가 생성하는 index.db 파일을 확인해 볼 수 있습니다. 이 파일은 SQLite3 데이터베이스입니다. 다음 쿼리를 실행하여 파서가 어떤 데이터를 다루고 있는지 살펴볼 수 있습니다. 이 쿼리는 게시한 두 개의 Message-ID에 해당하는 메시지를 선택합니다.

SELECT *
FROM email
WHERE msg_id IN ('bbe76bf7a9cab5a2ec2a06e6ef453555', '23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net')

email_date와 raw_message 컬럼이 가장 흥미로울 것 같습니다. 이메일 파서를 혼란스럽게 만드는 원인을 찾을 수 있을지도 모릅니다…

첫 번째 날짜가 null이고, 해당 메시지에 대해 mbx에 날짜가 없는 것을 확인했습니다. 답변(Re: 포함)이 “초기” 메시지보다 앞에 표시되는 것을 보니, 날짜가 누락된 것이 아니라 그렇게 생각했습니다. 가져오기 시 해당 제목을 가진 파일의 첫 번째 메시지를 부모 메시지로 간주하나요?

이메일 날짜는 다음과 같은 “Date:” 줄에서 가져오는 건가요?

Date: Wed, 25 Mar 1992 12:23:00 GMT

날짜가 누락된 항목들을 복구할 수 있는지 확인해 보겠습니다.

두 번째 문제에 대해서는 명확한 오류가 보이지 않습니다. 이 이미지가 문제 해결에 단서가 될까요?

아니요, In-Reply-To와 References 헤더를 사용하여 Message-ID로 매칭하고 정렬합니다. 단, 임포터의 group_messages_by_subject 설정을 true로 변경한 경우를 제외합니다.

네.

제 추측으로는 첨부 파일 중 하나에 문제가 있는 것 같습니다. 파일 확장자가 허용되지 않는 것일까요?

저는 group_messages_by_subject 설정을 true로 설정했습니다. 그렇지 않으면 아예 그룹화가 되지 않았기 때문입니다.

해당 메시지에는 두 개의 인라인 이미지가 있습니다:

Content-Type: application/octet-stream;
name=“Conflict (was … long live Wil”
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=“Conflict (was … long live Wil”

Content-Type: image/jpeg; name=“2.1.3FarmerSideEffectLoop.jpg”
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=“2.1.3FarmerSideEffectLoop.jpg”

첫 번째 파일명에 확장자가 없어서 그런 것일까요?

mbx 파일을 건드리지 않고 index.db에 날짜를 삽입하는 방식으로 날짜 문제를 해결할 수 있을까요?

네, 그 방법도 됩니다. 저도 예전에 그렇게 했습니다. settings.yml에서 index_only를 true로 설정하는 것을 권장합니다. 이렇게 하면 메시지 인덱싱이 끝난 직후 바로 가져오기(import)가 시작되지 않습니다. 인덱싱이 완료된 후 데이터베이스에서 필요한 변경 사항을 모두 수행한 다음, index_only를 다시 false로 변경하고 가져오기를 재시작하면 됩니다.

무언가를 오해하고 있는 것 같습니다. index.db가 이미 생성되었으므로 인덱싱은 이미 완료된 것이 아닌가요?

index.db를 내 데스크톱으로 복사해 두었습니다. 날짜를 업데이트한 후 index.db를 다시 서버로 복원하고 가져오기를 다시 실행하려 했거든요. 그렇게 하면 안 되는 건가요?

mbox 파일을 편집하는 방식으로 진행하기로 했습니다. 예를 들어 "Date: Wed, 25 Mar 1992 17:43:06"와 같은 “Date” 라인을 추가하는 방식입니다. 업데이트된 파일을 전송하고 가져오기를 두 번 다시 실행했지만, email_date 필드가 업데이트되지 않았습니다.

index.db 파일을 삭제해야 하나요?

네, 삭제해야 합니다.