Mailing リストを Discourse へ移行する (mbox、Listserv、Google Groups など)

Google グループから Google Takeout を実行し、.mbox ファイルをアップロードしてインポートすることができました。

data/folder を既存のカテゴリにマッピングするには以下の手順が役立ちましたが、これは app コンテナではなく、import コンテナ内で行う必要があります(この記事では app コンテナで実行するよう書かれています):

./launcher enter import
rails c

# URL に表示されるカテゴリ ID を使用します。
# 例えば、カテゴリのパスが /c/soccer/16 の場合、ID は 16 です
category = Category.find(16)

# mbox ファイルが保存されているディレクトリ名を使用します。
# 例えば、ファイルが import/data/foo に保存されている場合、ディレクトリ名は "foo" です
category.custom_fields["import_id"] = "soccer"
category.save!

Discourse にはすでに自己移行したユーザーが存在していたため、インポートスクリプトはそれらのユーザーに対して連絡先を作成できませんでした(これは問題ないかもしれません)。しかし、これらの既存の Discourse ユーザーが関与していたインポートされたメッセージでは、送信者が名前ではなく system として表示されてしまいます。

既存のユーザーをインポートされたメッセージにマッピングする方法はありますか?

現在は最近のバックアップから復元してすべて元に戻しました。既存の Discourse ユーザーとインポートされたメッセージの扱いについてガイダンスを得て、再挑戦する準備ができています。

更新:

Claude の助けを借りて既存のユーザーのマッピング問題を解決しました。上記のコードに加えて、Rails コンソールで以下のループを実行する必要があります:

User.where("id > 0").find_each do |u|
  email = u.email.downcase
  unless u.custom_fields["import_id"].present?
    u.custom_fields["import_id"] = email
    u.save_custom_fields
  end
end