markcoley
(Mark Coley)
2021 年12 月 16 日 21:14
1
我已成功使用 Digital Ocean 的云服务安装了 Discourse,并打算在确认 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 个赞
pfaffman
(Jay Pfaffman)
2021 年12 月 16 日 21:26
2
除非你有成千上万的帖子,否则我建议你清空数据库并重新开始。如果你想用一种更痛苦且可能导致问题的方式来做,你可以找出如何删除包含导入 ID 的 PostCustomField。如果你想删除所有这些,你可以执行 PostCustomField.all.destroy_all,但如果你要这样做,那么最好还是简单地做。
2 个赞
markcoley
(Mark Coley)
2021 年12 月 16 日 21:36
3
当您说“擦除数据库”时,是指擦除 Discourse 中的所有主题和帖子,以及所有通过导入器处理的入站电子邮件记录(但保留 Discourse 和用户的结构等不变)?还是指导入电子邮件的数据库,这样可以保留现有帖子,但允许我重新运行导入器处理旧电子邮件?
1 个赞
pfaffman
(Jay Pfaffman)
2021 年12 月 16 日 23:57
4
哦。如果你一直在一个有用户添加帖子等的实时实例上运行导入,那么你就麻烦大了。
如果你删除了所有导入的帖子,你可以这样做:
PostCustomField.where(name: "import_id").destroy_all
1 个赞
markcoley
(Mark Coley)
2021 年12 月 17 日 00:52
5
非常感谢 @pfaffman !这似乎奏效了,尽管我不太确定幕后发生了什么。
我使用了 ./launcher enter app,然后输入 rails c,接着输入 PostCustomField.where(name: "import_id").destroy_all,然后出现了大量文字(有些部分是红色和绿色的),然后当我退出 rails 并重新运行 import_mbox.sh 时,之前导入然后被我删除(通过移除主题)的原始电子邮件又全部出现在 discourse 中。如果我将电子邮件复制到另一个分类文件夹,它们也会被重新导入,正如我之前怀疑的那样,会产生重复。
这只是一个测试论坛,有一些额外的回复供人们在决定是否迁移到 discourse 之前查看,所以擦除并重新开始损失不大。
您还提到了擦除数据库并重新导入所有内容。擦除数据库最简单的方法是什么?
pfaffman
(Jay Pfaffman)
2021 年12 月 17 日 09:43
6
很高兴这奏效了!也很高兴重新开始不会有问题。我真的认为如果可以的话,从头开始是最好的。
最简单的擦除方法是
rm -r /var/discourse/shared/standalone/post*
然后重建。您还可以做的另一件事是在重建后立即进行备份,然后您可以恢复该备份。
1 个赞