如何修复格式问题? - markdown迁移到HTML不当

我们已成功从 flarum.amybo.org 迁移到 discourse forum.amybo.org,但论坛现在充斥着格式问题。例如:

@\"Gerrit\"#p174 我喜欢水基液体(就像 Rabaey 的一样)的想法,所以我查看了 [Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml) 的成分:
1. 纯净水,
2. 硼酸钠,
3. 防腐剂(柠檬酸),

变成了:

<r>
<p>
<POSTMENTION discussionid="25" displayname="Gerrit" id="174" number="8">@\"Gerrit\"#p174</POSTMENTION> I like the idea of a water based liquid (just like Rabaey's) so I checked out the <URL url="https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml"><s>[</s>Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml)<s></s></URL> ingredients:
</p>
<LIST type="decimal">
<LI><s>1. </s>Purified Water, </LI>
<LI><s>2. </s>Sodium Borate, </LI>
<LI><s>3. </s>Preservative (Citric Acid), </LI>
</LIST>

有什么推荐的方法来修复这些问题吗?

如果能自动修复整个论坛(而不显示每个帖子的编辑记录),那将是最好的,但如果不行,那么半自动修复(我们可以逐个帖子应用)也比手动删除每个 HTML 标签以恢复到 markdown 要好。

修复这些问题应该在你进行导入时进行。作为一个经常进行迁移的人,人们在论坛上线时出现格式错误是我最担心的事情之一。修复导入脚本会很容易,而现在论坛已经上线,事后修复会困难得多。当时可能只需要一两个小时,而现在则需要2-5倍的工作量。

是的,可以编写一个脚本来清理在线论坛上的内容,并且(令人担忧的是)不维护编辑(这样就不会有编辑,也不会有通知),或者进行编辑并告诉它不要顶帖/通知。我确定我以前做过。你会这样做:

fixes = Post.where("raw like '%something broken%'")
fixes.each do |p|
   new_raw = p.raw.gsub!(some stuff)
   PostRevisor.new(p).revise!({raw: new_raw, edit_reason: 'post fixer!'}, {bypass_bump: true)
end

raw 是否包含所有这些 HTML?

2 个赞

我相信您可以使用 posts:remap rake 命令(请参阅 Replace a string in all posts 以了解如何操作);您不应该使用该命令进行编辑。

1 个赞

那个 rake 任务对于简单的替换来说是可以的,但很快就会变得笨拙。

您是什么意思?比如,如果您想管理复杂的正则表达式,那不实际?

好的。您正在 Shell 中调用该任务,因此快速确定您是在转义 Bash、Ruby 还是正则表达式会变得困难或不可能。此外,看起来修复程序将不是简单的替换。

2 个赞

我是 Discourse 新手,但现在我找到了如何访问原始数据的方法,是的,它确实包含了所有的 HTML:
https://forum.amybo.org/raw/56/9

您是否使用了现有的 flarum_import.rb 脚本?我很难想象 flarum 的 p.content 字段(也就是导入脚本中的 raw 字段)中会有 HTML。我非常确定 flarum 使用的是 markdown,所以我不知道为什么你的 raw 字段里会有 HTML。或者也许脚本就是这么糟糕。

但是删除线是 HTML 中的内容。也许你只需要用 CSS 来修复它。

修复 \u003cPOSTMENTION\u003e 有点棘手,因为 Discourse 有引用,但没有提及。简单的解决方案是将其更改为简单的 @${displayname}(并希望用户名与导入前相同,或者在 user_custom_fields 中查找以找到更新后的用户名)。您还可以做的是包含一个链接,例如 @mention said [here](/t/-/\u003cdiscourse ID for topic 25\u003e/\u003c8\u003e)

一个疯狂的解决方案是编写一个脚本,从 flarum 数据库中提取 markdown,并更新 raw 字段以包含它。它仍然需要一些清理(例如提及和 POSTMENTIONS),但它会修复很多东西。

另一个想法是冻结您的站点,批量删除所有导入的数据,修复导入脚本,然后重新运行它。

但是自从您迁移以来,您的新帖子不多,所以也许您可以以某种方式保存它们,在一个空的数据库上进行全新的导入,然后将它们添加回来。处理新用户会有点困难。

如果您有预算,可以联系我或在 Marketplace 发布。

2 个赞

谢谢 Jay,我没有亲自进行迁移,所以不知道使用了哪个脚本。负责此事的成员目前患流感,但等他们回来后,我会将他们引荐到您这里精彩的建议。

1 个赞