メールマガジンからメールをインポートした際、一部の投稿からコンテンツが欠落している件について調査しています。いくつかのメールでは、見出しやセクションが「~~~~~~~~~~~~~~~~」という行で囲まれており、その行が単独で現れた最初の場所以降のすべての内容が、Discourse の投稿から省略されてしまいます。
投稿内のメールを検証すると、元の base64 エンコードされたメールを確認でき、「Text」タブに切り替えると、欠落なくデコードされた内容が表示されます。
./launcher enter app
rails c
Post.find_by(id: 154678)
=> #<Post:0x000055b8da925e08
...
Rails を使用して確認したところ、raw カラムは最初の「~~~~~~~~~~~~~~~~」の直前で途切れており、cooked カラムには raw と同じ内容が HTML として適切にレンダリングされたものが含まれています。メールのトリミングに関連する設定を変更してみましたが、それらが実際に影響を与えるかどうかを確認する方法がわかりません。
私の理解では、投稿に対して「HTML の再構築」を実行するか、Rails で Post.find_by(id: 154678).rebake! を実行すると、raw の内容から HTML を生成し、cooked を設定します。ただし、これが raw_email の内容を再度処理するかどうかは不明なため、変更した設定が効果があるかどうかをどうテストすればよいかわかりません。
rebake! が raw_email を再処理しない場合、Discourse に投稿の raw_email を再処理させるにはどうすればよいでしょうか?そうすることで、トラブルシューティングが正しく行われているかを確認できます。
また、コンテンツが省略されるのを防ぐ方法についてご存知であれば、そちらの情報も歓迎します。
関連トピックの検索を続けていたところ、管理者画面の「メール」セクションにある「高度なテスト」機能を見つけました。これが原因ではないかと疑っていたのですが、その機能を使って確認した結果、問題の原因は「受信メールのトリミング」設定であることが分かりました。この設定の説明は「受信メールの関連性の低い部分を切り取る」です。
この設定を無効にすると、これらのメールに対して正しい結果が得られるようになりますが、再バーク(rebaking)を行ってもメールが再処理されないようです。したがって、残る疑問は「Discourse に、受信メールから作成された投稿を再処理させるにはどうすればよいか?」という点です。
リポジトリを掘り起こし、メールの処理に関わるコードを探していました。その結果、オプションでトピック ID を受け取る Rake タスク posts:refresh_emails を発見しました。以下のコマンドを実行すると、名前の通りメールが再処理され、指定されたトピック内のすべての投稿が再レンダリングされます。
cd /var/discourse
./launcher enter app
rake posts:refresh_emails['24961']
これにより、「受信メールのトリミング」が無効化されている状態で、そのトピックの投稿が期待通りトリミングされずに表示されました。これにより、先に進む前に解決すべき別の問題が明らかになりましたが、それはこのトピックの範囲外です。すべてのトピックのメールをすべて再処理するには、以下のように Rake タスクを使用できます。
cd /var/discourse
./launcher enter app
rake posts:refresh_emails
system
(system)
クローズされました:
2021 年 9 月 22 日午後 9:46
4
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.