既にインポートされた電子メールの再インポート

Discourse を Digital Ocean のクラウドサービスで正常にインストールしました。Discourse で必要なすべての機能が実現できるか確認でき次第、一部の listserv メーリングリストを移行する予定です。テスト中、数日おきにメーリングリストから届く新しいメールを Windows 10 の Thunderbird を使用して Windows のフォルダに保存していました。その後、FileZilla を使用して、そのフォルダを /var/discourse/shared/standalone/import/data/ExampleCategory1(または ExampleCategory2)フォルダにコピーしていました。次に、インポート用 Docker を起動し、import_mbox.sh を実行していました。これまでのところ、すべて順調に進み、メーリングリスト経由で受信した内容を手動で Discourse に再現できていました。

しかし、ExampleCategory1 と ExampleCategory2 をカテゴリとして設定し、誤って ExampleCategory1 用のフォルダに届くはずのメールを ExampleCategory2 に入れてしまい、それに気づかずにインポートを実行してしまったと想像してみてください。(FileZilla でドラッグ&ドロップを誤りました!)

これにより、誤ってあるメーリングリストのメールが別のカテゴリに入ってしまいました。

これを修正するために、Web インターフェースを使用して ExampleCategory2 のすべてのトピック/投稿を削除し、念のため rake destroy:topics["ExampleCategory2"] を使用して削除した後、再度 import_mbox.sh を実行する計画でした。(各カテゴリに含めるべきメールのコピーはすべて持っています)。しかし、Discourse は、投稿が削除された後でも、インポートしたメールを記憶しているようで、再度インポートしてくれません!

これをどのようにすればよいでしょうか?

管理設定セクションのメール受信ログには、削除された投稿を作成した受信メールがまだ表示されていますが、(現在は削除されている)投稿に移動するためのハイパーリンクがありません。元の受信メールのすべての証拠をクリアする必要があると思いますが、その方法がまったくわかりません。

「いいね!」 2

何十万もの投稿がない限り、データベースを消去して最初からやり直すことをお勧めします。より苦痛で問題を引き起こしやすい方法を取りたい場合は、インポートIDを含むPostCustomFieldを削除する方法を見つけることができます。それらをすべて削除したい場合は、PostCustomField.all.destroy_allを実行できますが、それを行うのであれば、簡単な方法で行う方が良いでしょう。

「いいね!」 2

「データベースをワイプする」とは、Discourse のすべてのトピックと投稿、およびインポーターを通過した受信メールのすべての記録(Discourse の構造やユーザーなどはそのまま残す)を意味しますか?それとも、インポーターを古いメールで再実行できるように、既存の投稿はそのままにして、インポートされたメールのデータベースを意味しますか?

「いいね!」 1

ああ。もしユーザーが投稿などを追加したライブインスタンスでインポートを実行していた場合、それは大変なことになります。

インポートされたすべての投稿を削除した場合、次のようなことができます。

PostCustomField.where(name: "import_id").destroy_all
「いいね!」 1

@pfaffman 様、ありがとうございます!うまくいったようですが、裏で何が起こったのかはよくわかりません。

./launcher enter app を実行し、rails c と入力し、PostCustomField.where(name: "import_id").destroy_all と入力すると、多くのテキストが表示され(一部は赤と緑に着色されていました)、その後 rails を終了して import_mbox.sh を再実行すると、以前インポートされてから私によって削除された(トピックを削除することによって)元のメールがすべてディスコースに再度表示されました。他のカテゴリフォルダにメールをコピーすると、私が疑っていたように重複して再インポートされます。

これはテストフォーラムであり、ディスコースに移行するかどうかを決定する前に、人々が見るための追加の返信がいくつかあるだけなので、ワイプして再起動しても大きな損失はありませんでした。

データベースをワイプしてすべてを再インポートすることについても言及されていました。ワイプする最も簡単な方法は?

うまくいってよかったです!そして、最初からやり直しても問題ないとのこと、よかったです。できるなら、クリーンな状態から始めるのが一番だと思います。

一番簡単な方法は、

rm -r /var/discourse/shared/standalone/post*

を実行してから再構築することです。あるいは、再構築直後にバックアップを作成し、それを復元することもできます。

「いいね!」 1