「Failed to map post」エラーのインポート

インポート中に約1000件の投稿が失敗しています。主なエラーは「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

「いいね!」 3

助けて!これについて何か提案はありますか? :woozy_face:

先週、別の問題に取り組んでいる際に同じエラーを目にしました。今週中に修正し、完了したらここに更新を投稿します。

これらは単なる警告であり、「投稿のマッピングに失敗しました」というエラーが原因で表示されている可能性が高いです。存在しない投稿を参照するメッセージがある場合に発生します。他の問題を修正すれば、これらの警告のほとんど(あるいはすべて)が解消されると確信しています。

「いいね!」 5

このエラーは FIX: Email attachments with a size of 0 bytes caused error · discourse/discourse@e84d88d · GitHub で修正されるはずです。

「いいね!」 3

アップグレード後、インポートを再実行し、receiver.rb が更新されていることを確認してインポートを再度実行しました。

それにより数百件のメッセージが解決したようですが、ありがとうございます。

ただし、約200件の失敗がまだ発生しています。主な失敗の種類は以下の通りです:

日付が不足しています。bbe76bf7a9cab5a2ec2a06e6ef453555 をスキップします

23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net の投稿のマッピングに失敗しました
Discourse::InvalidAccess

さらに、「親が存在しません」というメッセージが多数表示されていますが、これらは上記の結果だと推測されます。

これらのエラーの原因についてご存知でしょうか?最初のエラーについては mbx メッセージを確認しましたが、日付が不足している様子は見当たりませんでした。

index.db をご覧になることをお勧めします。これはインポートスクリプトが作成する SQLite3 データベースです。以下のクエリを実行すると、パース対象のデータを確認できます。これは、投稿された 2 つの Message-ID に該当するメッセージを選択します。

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

おそらく、email_dateraw_message の列が最も興味深いでしょう。メールパースを混乱させている原因が見つかるかもしれません…

「いいね!」 1

最初のものは日付が null であり、mbx のそのメッセージにも日付が表示されていません。返信(:Re 付き)が「最初の」メッセージより前に表示されているため、日付が欠落しているとは考えませんでした。インポートでは、その件名のファイル内で親メッセージが最初のものとして扱われるのでしょうか?

メールの日付は、以下のような「Date:」行から取得されるのでしょうか?

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

日付が欠落しているものを修復できるか確認します。

2つ目については、明らかに問題があるようには見えません。この画像に問題の手がかりはありますか?

いいえ、group_messages_by_subject 設定を true に変更しない限り、In-Reply-To および References ヘッダーを使用して一致させ、Message-ID でソートします。

はい。

私の推測では、添付ファイルのいずれかに問題があるようです。もしかすると、ファイル拡張子が許可されていないのかもしれません。

「いいね!」 1

グループ化が全く行われなかったため、group_messages_by_subject 設定を true に設定しました。

そのメッセージには 2 つのインライン画像が含まれています:

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”

最初のファイル名に拡張子が含まれていないことが原因でしょうか?

「いいね!」 1

mbxファイルをいじり回す代わりに、index.db に日付を挿入することで、日付の問題を解決することは可能でしょうか?

「いいね!」 1

はい、その方法で問題ありません。過去に私も同じことを行いました。settings.ymlindex_onlytrue に設定することをお勧めします。これにより、メッセージのインデックス作成が完了する直後にインポートが開始されなくなります。インデックス作成が完了した後で、データベースに必要な変更をすべて加えることができます。その後、index_only を再び false に変更して、インポートを再起動してください。

何かを誤解しているような気がします。index.db がすでに構築されているのであれば、インデックス作成はすでに完了しているのではないでしょうか?

index.db をデスクトップに転送しました。日付を更新してから index.db をサーバーに戻し、その後インポートを再実行するつもりでした。それは間違っていますか?

mbox ファイルを編集し、“Date” 行(例:“Date: Wed, 25 Mar 1992 17:43:06”)を追加する方針にしました。更新されたファイルを転送し、インポートを 2 回実行しましたが、email_date フィールドが更新されませんでした。

index.db を削除する必要がありますか?

はい、削除する必要があります。

「いいね!」 1