Canapin
(Coin-coin le Canapin)
1
在导入 vBulletin 后,我需要修复大量已导入帖子中的问题。
我需要修改、替换或删除许多旧的 BBcode 标签。
我正在查看这个:Replace a string in all posts
由于我有 160 万篇帖子,我绝对不想犯任何错误。
-
是否有一种方法可以仅针对某一篇特定帖子进行测试,然后再在所有帖子中替换字符串?
我在论坛中创建了一篇“测试”帖子,其中包含各种上下文中的大量 BB 标签。
-
在 100 万篇以上的帖子中替换字符串需要多长时间?
如果耗时很长,是否有更快的方法?例如,直接在数据库中编辑文本?
-
是否有一种方法可以一次性进行多次替换(例如,在 [quote] 标签前后添加换行符,将 [b] 和 [i] 替换为 ** 和 *,移除 [color] 和 [indent] 等)?
编辑:是否可以通过 Rails 直接修改原始帖子内容,然后重新烘焙所有帖子来实现这些更改?
1 个赞
neounix
(Dark Matter)
3
嗨 @Canapin
关于我们六个月前从 vB3 迁移到 Discourse 并达到 100 万篇帖子的经验:
从 vB 迁移时,我们进行了大量数据清洗和 BBCode 标签重构,并在迁移脚本中编写了许多自定义 Ruby 代码。
我们发现这种方法效果最好:在将 vB 帖子插入 Discourse 数据库之前,通过运行大量 Ruby gsub 正则表达式来清理所有内容。
否则,您将不得不对 Discourse 原始帖子执行大量 PostgreSQL 查询,并重新处理这些帖子。
经过广泛测试,我们决定在迁移期间(而非迁移后)完成所有预处理。我们发现这是实现完美迁移的“更快”方式。
供参考。
1 个赞
Canapin
(Coin-coin le Canapin)
4
您是否知道有一种方法可以仅重新导入帖子,而不会影响已导入的 Discourse 数据(尤其是与帖子 ID 关联的数据,如用户、主题、附件、固定链接等)?
导入过程非常漫长,如果我遗漏了某些内容而必须重新导入全部数据,那将再次耗费数天时间。
脚本在导入帖子时,每小时可创建约 50,000 条 Discourse 帖子。为什么重新生成(rebake)所需的时间要长得多?
neounix
(Dark Matter)
5
你好 @Canapin
我理解您的困扰。在我们最初的迁移之后,我们编写了大量自定义的 Ruby 代码,用于清理从全球各地复制粘贴而来的超过十年的代码;更不用说那些乱码和奇怪的字符集;还有各种嵌套的 bbcode,这些都需要大量的 Ruby 技巧才能在迁移过程中进行妥善清理。
这项工作并非易事,耗时很长(并且经历了无数次的迁移尝试);但我们主要是一个编程论坛,所以如果您的论坛内容主要是文本(而非代码),那么情况应该会简单得多。
我们的团队还编写了许多“稍微复杂的转义逻辑”正则表达式(REGEX);因为将多年来用户发布的大量嵌套 bbcode 转换为 Markdown 并不简单。我们还剔除了许多我们认为在发布多年后已无太多价值的 bbcode。
针对您最初的问题:
是的,您只需在迁移脚本中注释掉想要跳过的方法即可。
我们实际上重写了大部分迁移方法,但它们是非常好的起点,而且非常有用,毕竟 vB3 的迁移当时及现在都不受官方支持。
1 个赞
Canapin
(Coin-coin le Canapin)
6
我知道这一点,但如果我直接启动迁移脚本,它会跳过已存在的帖子。
如果我在重启迁移之前删除所有已导入的 Discourse 帖子,我推测重新导入它们会赋予它们与之前迁移不同的 ID(Discourse 帖子 ID),从而导致所有指向这些帖子的引用可能失效。
1 个赞
neounix
(Dark Matter)
7
是的,正如人们所说,解决这个问题的方法有很多。
我很高兴我们一生中只需做一次,而且现在已经完成了!

1 个赞
pfaffman
(Jay Pfaffman)
8
如果可能的话,让导入方来修复这些问题会容易得多。如果你已经上线,那将会非常漫长且痛苦。你可以设计一个导入脚本来修改已导入的帖子,但我不知道有任何现成的模型可以指导如何实现这一点。
1 个赞
Canapin
(Coin-coin le Canapin)
9
那我猜我得在导入前修改导入器来执行我的正则表达式,然后尽量保持耐心了!
谢谢你的回复。
2 个赞
system
(system)
关闭
10
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.