Импорт: ошибка «Не удалось сопоставить пост»

У меня около 1000 постов не импортируются; основная ошибка, как я понимаю, — «Не удалось сопоставить пост», например:

Не удалось сопоставить пост для b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net
undefined method `hex’ for nil:NilClass

Это, по-видимому, вызывает сбой множества других постов с сообщениями об ошибках вроде:

1109 / 65895 ( 1.7%) [400 items/min] Родительское сообщение b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net не существует. Пропуск CAKPLMstp+CaTyfFinM-dHHpVxNHt0fy2vXT9Fx+21mE2RT-ijg@mail.gmail.com: A PCT approach to the “Power Law”

Есть ли какие-либо предложения по решению этой проблемы?

У меня есть посты за 28 лет, по папке на каждый год, с mbox-файлом на каждый месяц. В mbox-файлах содержится 66909 сообщений. При импорте показано 65895. Объясняется ли разница в 1014 сообщение теми сбоями, которые указаны в выводе импорта?

Посты были конвертированы из Eudora mbx в стандартные mbox с помощью Aid4Mail.

По ошибке «Родительское сообщение не существует» я насчитал 421 случай.
По ошибке «Не удалось сопоставить пост» — 149 случаев.

Мой split_regex — “^From .@. [0-9]{4}”, что, как мне кажется, подходит для заголовков вроде:

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

Помогите! Есть какие-нибудь предложения по этому поводу? :woozy_face:

На прошлой неделе я сталкивался с той же ошибкой, работая над другой проблемой. На этой неделе я займусь её исправлением и опубликую обновление здесь, как только всё будет готово.

Это просто предупреждения, и они, вероятно, возникают из-за ошибок «Не удалось сопоставить пост». Это происходит, когда сообщение ссылается на несуществующий пост. Я почти уверен, что исправление другой проблемы устранит большинство, если не все, эти предупреждения.

Эта ошибка должна быть исправлена в FIX: Email attachments with a size of 0 bytes caused error · discourse/discourse@e84d88d · GitHub

Я обновился, пересобрал импорт, проверил, что receiver.rb был обновлён, и запустил импорт заново.

Кажется, это решило проблему с несколькими сотнями сообщений, спасибо.

Однако около 200 сообщений всё ещё не проходят из-за нескольких типов ошибок:

Отсутствует дата. Пропуск bbe76bf7a9cab5a2ec2a06e6ef453555

Не удалось сопоставить пост для 23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net
Discourse::InvalidAccess

Также есть множество сообщений «Родитель не существует», которые, по моему предположению, являются следствием вышеуказанных ошибок.

Есть какие-то идеи, чем вызваны эти ошибки? По первому случаю я посмотрел сообщение 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”

Возможно, у первого имени файла нет расширения?

Могу ли я решить проблему с датой, вставив её в index.db, вместо того чтобы возиться с файлом mbx?

Да, это работает. Я делал так же в прошлом. Рекомендую установить index_only в true в файле settings.yml, чтобы импорт не начинался сразу после индексации сообщений. Все необходимые изменения в базе данных можно внести после завершения индексации. Затем снова установите index_only в false и перезапустите импорт.

Кажется, я что-то неправильно понимаю. Разве индексация уже не была выполнена, раз файл index.db уже создан?

Я перенёс файл index.db на свой компьютер. Я собирался обновить даты, затем вернуть index.db на сервер и снова запустить импорт. Разве это неправильно?

Я решил пойти по пути редактирования файлов mbox, добавив строку «Date», например: «Date: Wed, 25 Mar 1992 17:43:06». Я передал обновлённые файлы и дважды перезапустил импорт. Однако поле email_date не было обновлено.

Мне нужно удалить index.db?

Да, вам нужно его удалить.