将 phpBB3 论坛迁移到 Discourse

我至少可以说,这不仅仅发生在旧帖子链接到新帖子的情况下。

我找到了一个最初发现该问题的示例。

原始帖子 ID:842948 链接到一个已存在的主题的第 22 页,且至少起始帖子(&start=220)的 ID(842880)低于链接帖子的 ID。

导入后,这个原始帖子(仅在该数据转储创建前几天发布)链接到了一个 7 年前的主题,其中第一个帖子的原始 ID 为 1353。

我似乎找不到任何关于为何会出现这种情况的线索,数字之间也没有任何相似之处……原始链接只是一个普通的发布 URL,由 phpBB 自动链接。这类链接通常不会引起任何问题——它们在多个其他位置都能正常工作。

一般来说,我并不指望导入能立即顺利进行。我对目前的进展感到非常满意,但我认为这个问题可能是最难修复的,尤其是因为我目前还不知道如何搭建 Discourse 的开发/调试环境。可能很快就需要深入研究一下了。

3 个赞

你好,
据我所知,phpBB 导入器默认会根据用户邮箱地址猜测并填充 Discourse 用户的完整姓名。我说的对吗?现在还是这样吗?我在导入器文件中找不到任何相关说明……

这是我接下来要导入的论坛不希望发生的情况。

另外,还有一个问题。

在当前的 phpBB 论坛上,存在自定义用户字段(例如用户的 Facebook 或 Instagram 链接)。我希望将这些字段导入到 Discourse 的自定义字段中。我猜我的做法是:先安装并配置 Discourse,添加这些自定义用户字段,然后通过我自定义的导入脚本导入 phpBB 数据?

1 个赞

这种情况已经不再发生了。

这听起来是个不错的计划。

6 个赞

从 phpBB 迁移到 Discourse 后,是否有可靠的方法可以估算 Discourse 每月向用户发送的邮件量?例如新用户注册、提及、回复、每周摘要等。phpBB 默认发送的邮件很少,我认为我们可能需要更换当前的邮件服务提供商。
我目前还没有 phpBB 的实际统计数据。该论坛自 2013 年运行至今,拥有 20 万条消息和 5500 名成员,每天都有新成员注册。

1 个赞

每天发布多少帖子?

1 个赞

我还不清楚。目前我只有公开统计数据,大概 20 个。

1 个赞

如果每天只有 20 篇帖子,我估计你每月的邮件量最多也就 3000 封,完全在 Mailgun 免费计划的范围内。

不过,鉴于你正在迁移并拥有大量用户,我建议暂时关闭那些过去一两个月内未访问过论坛的用户的摘要邮件(如果他们需要,可以随时自行开启)。你可以通过 Rails 控制台执行查询来实现这一点,但距离我上次操作已经过去一年了,所以记不清具体的代码了,抱歉。

在我看来,这其实应该是导入脚本可以为你完成的功能,理想情况下还能提供一个设置,根据用户上次访问的时间来启用摘要邮件。

4 个赞

我不同意。这不应该由导入脚本处理,但有一个网站设置可以实现此功能:suppress digest email after days

4 个赞

确实 :slight_smile: 在我将 phpBB 导入到当前论坛后,我不得不降低默认值;我的电子邮件提供商因发送了大量摘要邮件而自动封锁了所用地址,该地址被标记为垃圾邮件。

1 个赞

这并不完全是一回事。在我看来,向那些注册后 X 个月内未访问论坛的用户发送摘要邮件(因为他们注册了该功能——不访问论坛并不意味着他们没在查看摘要邮件),与向从未注册过摘要邮件的用户(仅因他们在旧论坛注册过)发送摘要邮件,这两者之间存在区别,后者在某些司法管辖区甚至可能不合法!你可以简单地为所有迁移用户关闭摘要邮件功能,让他们自行重新开启;或者像我一样,仅关闭那些过去一个月内未访问过论坛的用户的摘要邮件功能,因为这些人应该已经看到了“论坛即将迁移”的公告。我认为这是一个公平的折中方案。

此外,这也更实际——我们的 phpBB 论坛在过去一年中积累了数千个垃圾邮件账号,如果每月向这些账号发送四次摘要邮件,会耗尽我们免费的 Mailgun 额度,随后就会产生高昂费用。通过减少“在指定天数后清理不活跃用户”的设置,最终清除了这些垃圾账号。

5 个赞

不确定该内容是否适合放在这里,还是应该单独开一个话题。但既然涉及从 phpBB 3 迁移,我就在此提出。

我已成功将数据迁移到 Discourse,目前使用的是单个数据库。不过,我有三个独立且不同的社区(三种不同语言,三个不同的 phpBB 安装),理想情况下,我希望将它们全部合并为一个统一的 Discourse 论坛。

我的问题是:该如何实现这一点?我需要在导入脚本、phpBB 3 数据库或其他任何地方进行哪些更改?

有一些用户在多个论坛都拥有账户(甚至可能三个论坛都有),但由于没有单点登录(SSO),他们在每个论坛上的账户虽然用户名相同,但实际上是不同的账户。这些安装彼此独立,数据库也各不相同。

如果这能够实现,那就太棒了!

提前感谢大家的帮助!

1 个赞

它无法开箱即用,因为导入脚本会将原始 ID 存储到 Discourse 数据库中,如果发现有相同 ID 的记录,它将不会导入来自其他论坛的数据。不过,我想到了两种解决方法:

  1. 困难方案:你需要在多个位置编辑导入脚本,并为帖子、主题、分类和用户的 import_id 自定义字段添加每个论坛的前缀。

  2. 简单方案,但你将失去增量导入的能力:在每次导入后删除自定义字段。

    TopicCustomField.where(name: 'import_id').delete_all
    PostCustomField.where(name: 'import_id').delete_all
    CategoryCustomField.where(name: 'import_id').delete_all
    UserCustomField.where(name: 'import_id').delete_all
    

方案 2 尚未经过测试,但理论上应该可行。在尝试之前,请创建备份。

7 个赞

新年前的初步测试结束后,我们现在重新推进迁移项目。目前最大的问题之一是内部链接重写失败,我正在思考如何最佳地处理这一问题。

@gerhard 我的编程知识非常基础,对 Rails 整体以及 Discourse 的详细结构几乎一无所知。因此,请允许我提出这个问题:是否有可能处理这种情况,即导入器无法根据链接中的 ID 找到已导入的帖子?或许可以不用将其替换为错误的链接,而是附加一段文字,告知用户或管理员,并在导入后使这些有问题的链接可被查找?

我目前最担心的是,现有的处理方式会让这些链接看起来像是已成功替换,导致导入后无法找到并手动修复它们。

非常感谢您能提供的任何帮助,我十分感激。

1 个赞

一种方法是重写脚本,使其在所有帖子导入完成后再替换这些链接。如果您需要帮助且有预算,可以联系我或在 Marketplace 发帖。

4 个赞

不幸的是,该项目预算有限,我想这个问题还不至于重要到值得为此花钱,但得知您愿意提供帮助确实很好。

还有一个问题:我注意到在导入时,bbcode 似乎被以不同的方式处理。例如,[size] 标签会被保留为纯文本,而 [color] 标签则似乎被完全移除。我想复用颜色功能,发现有一个 Discourse 插件可以实现,但后来注意到它在导入时似乎也被移除了。初始帖子提到 bbcode 可以导入,但我找不到任何设置来控制哪些 bbcode 可以被导入或不被导入。

如果有办法的话,我更倾向于移除 size 标签,而保留 color 标签。我是否遗漏了关于如何处理这些标签的某些内容,以及是否有办法进行更改?

1 个赞

我刚刚发现,我 phpbb 论坛中已被修剪(pruned)的话题,我以为它们已经消失了,却不知何故被转移到了 Discourse。

这怎么可能呢?

1 个赞

我正尝试这样做,但被说明搞糊涂了。你指的是哪个设置文件?我应该在导入之前还是之后进行这个操作?
先谢谢你!

编辑:所以我想你指的是管理后台中的表情符号设置文件?有没有办法通过导入文本文件之类的方式来完成这个操作?我有大约 100 个自定义笑脸,希望能以某种方式将这些映射复制到 Discourse 中,这可能吗?(我能否以某种方式将 smilies.pak phpbb 文件复制到 Discourse 设置中?)

1 个赞

你确实看到了导入器的设置文件吧?:wink:

3 个赞

我想 phpBB 对修剪主题的处理方式与常规删除主题不同。在这种情况下,目前还不支持。你需要弄清楚 phpBB 如何标记修剪主题为已删除,并修改导入脚本。

3 个赞

对对对,当然!我上次做第一次转换已经是很久以前的事了,我完全把那件事给忘了,谢谢提醒!

关于被修剪的话题,是的,我也以为是那样。这对我的论坛来说不是什么大问题,但确实挺让人意外的,也许可以提前告知其他人可能会出现这种情况。

1 个赞