从 XenForo 迁移到 Discourse:迁移概述

我们已成功将我们的社区 (techenclave.com) 从 XenForo 迁移到 Discourse。

总帖子数: 250 万
总用户数: 79K(活跃和被封禁)
总私人消息数: 70 万

这是一个拥有 20 年历史的社区,经历过从 Proboards、Vbulletin、IPB、Xenforo 再到现在的 Discourse 的多次迁移。

我们花了 4 天时间完成了迁移。但在此之前,我们进行了 4 周的迁移前期准备和 4 周的自定义插件开发。

感谢大家在我遇到困难时提供的帮助和指导。 :folded_hands:
总的来说,这是一次非常成功的迁移,几乎没有丢失任何有用的数据。


我们的迁移核心是基于一个增强的 XenForo 导入脚本,该脚本在标准基础上进行了显著改进。我们还利用了几个专门的辅助脚本来处理特定的数据转换,并确保导入后的数据完整性。

主 XenForo 导入脚本的关键增强功能

性能优化(键集分页): 最关键的增强功能是采用了键集分页(WHERE id > last_id)。与传统的 OFFSET 查询相比,这种方法通过使用索引主键来获取下一组记录,从而极大地提高了大数据集上的批量处理速度。

强大的检查点和恢复机制: 为用户、主题、回复和私人消息实现了高级检查点逻辑(使用 .json 文件)。这允许导入过程在中断(例如服务器重启、脚本错误)后从最后一个成功导入的记录安全地恢复,从而节省大量时间。

两阶段帖子导入策略: 帖子现在分两个不同的阶段导入:

首先导入主题:所有原始 XenForo 帖子(首帖)将被导入,确保父主题在回复之前存在。

然后导入回复:接着导入主题内的后续帖子,并将它们正确链接到新创建的 Discourse 主题。这种结构化方法最大限度地减少了孤立的回复,并提高了数据一致性。

全面的反应/点赞导入:
该脚本现在能够智能地区分直接映射到 Discourse 核心“点赞”(心形)的 XenForo 反应和自定义反应。
它支持核心点赞(插入到 post_actions 表)和自定义反应(利用 discourse-reactions 插件)的批量插入,从而显著加快了处理速度。
包括 XenForo 表情符号短代码到 Discourse 等效项的映射(例如,thumbsup 到 +1,heart_eyes 到 heart)。

增强的市场数据导入(自定义插件):
添加了一个专用部分,用于从 XenForo 的 thread_field_value 表导入详细的市场列表数据(例如,价格、地点、状况、保修、付款方式)。
这些数据存储在自定义的 TecencMarket::Listing 模型中,并作为主题自定义字段,从而在 Discourse 中实现更丰富的显示和功能。

市场反馈导入(自定义插件):
引入了一个新功能,用于迁移与市场交易相关的用户反馈/评分(点赞/点踩)。

主题前缀到标签转换: 该脚本现在自动将 XenForo 的主题前缀转换为 Discourse 标签。这对于维护内容组织和可发现性至关重要,使用了 discourse-tagging 插件。它还使用 XenForo 的 phrase 表将前缀 ID 正确映射到人类可读的标题。

增强的帖子内容处理: 此方法已进行重大更新,以更好地进行 Markdown 转换和处理 XenForo 的复杂 BBCode:

改进的引用处理: 转换 XenForo 的 [QUOTE] 标签,包括处理被引用的用户以及在可能的情况下链接到特定的 Discourse 帖子/主题。

修正的媒体嵌入: 确保所有导入的媒体(YouTube、Twitter/X)都位于单独的行上,以启用 Discourse 的一键嵌入功能,并将旧的 BBCode [MEDIA] 标签转换为标准 URL。

表格转换: 将 XenForo 的 [TABLE] BBCode 转换为 Markdown 表格。

附件处理(内联和附加): 重构了附件处理逻辑。它现在尝试将 [ATTACH] 标签替换为上传文件的正确 Markdown。至关重要的是,任何未在帖子内容中明确标记为 [ATTACH] 的附件现在都将附加在帖子末尾,并在一个清晰的“附件:”标题下,确保没有文件丢失。

表情符号/笑脸转换: 扩展了 XenForo 笑脸到原生 Discourse 表情符号的映射,提高了视觉一致性。

常规 BBCode 清理: 更全面地移除和转换各种 BBCode 标签(例如,[B]、[I]、[URL]、[IMG]、[LIST]、[CODE]、[COLOR]、[FONT]、[SIZE]、[INDENT]、[USER])。

字符编码和清理: 包括用于无效 UTF-8 序列的 .scrub! 和用于正确 HTML 实体解码的 CGI.unescapeHTML。

被暂停用户处理: 被封禁的 XenForo 用户现在被导入为被暂停的 Discourse 用户,保留他们的帐户但限制其活动,并将封禁原因保存在自定义字段中。

书签导入: 从 XenForo 导入所有书签到 Discourse。一开始书签并不多。


迁移后,大部分用户并不满意。这是可以预料的。在迁移后听到这些并不新鲜。尽管如此,我稍后会在本主题中分享反馈摘要,其中可能有一些值得思考的内容,可以为 Discourse 的未来提供参考。

17 个赞

谢谢分享!列表中的很多内容我都确定为正在进行的SMF到Discourse迁移项目的行动项:slightly_smiling_face:

你们定制的导入器代码是否公开?我对你们如何处理两步导入以确保正确的新链接特别感兴趣。

2 个赞

您可以参考我使用的导入脚本。您想查看的文件是这个:
xenforo_import_enhanced.rb

7 个赞

我们之所以需要进行两次导入,是因为随着时间的推移,旧主题不可避免地会被合并到新主题中。但帖子仍然会保留旧的 ID,并首先被提取。此时,由于还没有相应的主题被导入,所有这些帖子都会被丢弃和丢失。

4 个赞

非常感谢!我会看看的。

另外,我很感谢你对这背后的想法的补充说明。幸运的是,我们没有遇到这个问题。我之所以考虑两阶段导入,主要是因为引文中的超链接仍然是旧的 URL——虽然永久链接也应该有效,但我认为直接使用新 URL 指向帖子会更好。

1 个赞

太棒了!恭喜!感谢分享。

是的,这是意料之中的。现在处理他们反馈的方式至关重要。回应他们的评论,确保他们感到被倾听,并强调改进和新功能(我相信有很多!)。如果您在处理反馈方面有任何困难,请在此处发布,我很乐意提供帮助。

看看这篇文章的最后一部分,它会给你一些指导:How to prepare your community for a Discourse migration

9 个赞

在使用自带的导入器失败四次后,您的版本运行得非常好。

4 个赞

分享承诺的总结。使用 Gemini 2.5 Pro 总结了过去 3 个月收集的所有反馈。

我想说最大的担忧是一个很好的主题。我希望 Discourse 像其他论坛平台一样有一个付费主题市场。


总结

关于迁移到 Discourse 的反馈意见分歧很大,但大多数活跃用户都表示强烈不满,导致参与度下降。最关键的问题集中在导航和可用性以及UI 和设计上,特别是对于习惯了传统论坛布局的桌面用户而言。虽然一些用户欣赏现代的外观和技术改进,但批评者普遍认为该平台优先考虑形式而非功能,导致认知负荷高且体验不直观。


1. 导航和可用性(最高优先级)

这一类别收到了最频繁和最详细的负面反馈。用户发现新平台根本上更难使用,这是他们参与度降低的直接原因。

  • 关键反馈点和权重:

    • 无限滚动不受欢迎: 最普遍的共识是用户不喜欢无限滚动,尤其是在桌面上。用户怀念分页来导航长帖的上下文和控制。
    • 总体导航困难: 许多用户认为该平台令人困惑、混乱、乏味,并且学习曲线陡峭,他们不愿为论坛投入精力。
    • 难以查找最后/未读帖子: 一个常见的难题是无法直观地跳转到最后一篇帖子或从帖子的特定点继续阅读,这需要用户学习不明显的解决方法。
    • 内容发现不佳: 用户怀念旧的分类页面,该页面提供了论坛结构和各部分最新活动的清晰、分层的概览。新布局被视为“大杂烩”。
    • 引用功能损坏: 引用文本的过程被描述为困难且不稳定,尤其是在移动设备和平板电脑上,引用弹出窗口可能会被原生 UI 遮挡。
  • 可操作的见解:

    • 优先考虑“传统论坛”体验: 核心问题是偏离了预期的论坛模型。一个模仿分页、更结构化视图的主题或布局,特别是对于分类页面,将解决最严重的抱怨。
    • 改进导航提示: 使跳转到第一篇、最后一篇和最后未读帖子成为一个明显的、一键式操作。当前的滚动条功能对许多人来说并不直观。考虑在帖子的顶部和底部添加明确的按钮。
    • 重新评估默认引用行为: 手动选择文本进行引用的需求是一个主要的摩擦点。研究插件或设置,使引用整个帖子成为默认的一键式操作。

2. UI 和设计(高优先级)

用户认为当前的设计浪费空间并影响可读性,直接影响他们消费内容的能力和意愿。

  • 关键反馈点和权重:

    • 过多的空白: 这是被提及最多的设计缺陷。使用大显示器的桌面用户觉得狭窄的中央列浪费了大量的屏幕空间,并降低了信息密度。
    • 定制化需求: 用户正在积极寻求通过自定义 CSS、不同主题(Horizon 上的 Default)和更小的字体大小来改善他们的体验。这表明用户强烈希望对外观有更多的控制权。
    • 可读性差: 空白、字体大小和帖子之间缺乏清晰分隔的组合使得与以前的软件相比,扫描和阅读内容更加困难。
  • 可操作的见解:

    • 开发“紧凑型”或“全宽”主题: 直接解决空白问题,提供一个利用更多屏幕宽度的官方主题。这也能满足定制化需求,并且是用户自己实施的最常见的解决方法。
    • 优化视觉分隔符: 增加帖子之间的视觉区分度。边框、交替背景色或不同的用户信息块布局等细微变化可以显著提高可读性并减少“聊天式”感觉。
    • 审查字体大小和层次结构: 对主题的排版进行审查,以确保更一致、信息密度更高的层次结构,特别是对于子类别文本和帖子内容。

3. 总体情绪和用户参与度(高影响)

相当一部分反馈表明对用户活动产生了直接的负面影响。虽然其中一些是抵制变化,但抱怨的一致性表明存在更深层次的问题。

  • 关键反馈点和权重:

    • 负面情绪/使用量下降: 这是一个关键指标。多位用户明确表示他们现在访问论坛的频率降低了。
    • 正面情绪: 一小部分但值得注意的用户喜欢现代感、速度以及通知系统和 Markdown 编辑器等功能。
    • 适应性用户: 这部分用户怀念旧论坛,但理解迁移的技术原因,并愿意适应。
  • 可操作的见解:

    • 承认和沟通: 公开承认用户反馈,并就 UI/UX 改进沟通清晰的路线图。这有助于留住目前感到沮丧但愿意适应的用户。
    • 优先处理“生活质量”修复: 首先关注低投入、高回报的更改(例如,如一位用户建议的那样,将类别颜色更改为与旧主题匹配),以表明反馈得到了倾听和响应。
    • 创建“入门”指南: 虽然一些用户抵制阅读指南,但一个置顶的主题可以快速解释 5 个最令人困惑的变化(例如导航帖子和引用),从而为许多人缓解过渡。

4. 核心功能和性能(中等优先级)

虽然不如 UI/UX 提及得多,但这些问题影响了论坛的核心目的。

  • 关键反馈点和权重:

    • 聊天式感觉: 设计鼓励简短、反应式的回复,而不是长篇、结构化的讨论,使其感觉更像一个聊天应用程序而不是论坛。
    • 搜索效果不佳: 用户报告搜索无法有效优先显示主题标题中的结果,导致难以找到已知的主题。
    • 性能问题: 一位用户指出,文本编辑器会变得卡顿,并在长帖中导致笔记本电脑发热。
  • 可操作的见解:

    • 调整搜索相关性: 研究 Discourse 设置或插件,这些设置或插件可以在搜索结果中更侧重于主题标题。管理员建议使用高级语法是一种解决方法,而不是默认搜索行为的解决方案。
    • 监控长帖的性能: 关注编辑器和滚动数千条回复的帖子的性能,以解决潜在的客户端瓶颈。
    • 启用 AI 搜索: 如管理员建议的那样,启用 AI 驱动的搜索可能是解决搜索相关性问题的长期方案,但应权衡其潜在成本。
3 个赞

为什么不使用 Marketplace 呢?尽管结果通常是私有的。

对于这些用户,您可能需要考虑明确调用 分类 概览。甚至可以考虑将该概览切换成他们更喜欢的东西。这是一个让他们参与进来的机会。
分享一些 桌面分类页面样式 不同设置的截图,并询问他们最喜欢哪种?

我们希望明确收到这方面的反馈。您能否请他们在此处(Meta)报告此问题?

这可以通过用户主题来修复 :slight_smile: 考虑将此主题组件添加到用户可选的主题中 GitHub - discourse/discourse-full-width-component: Make Discourse occupy the full browser width

我不明白“帖子之间清晰分隔”是什么意思?

改变总是艰难的,人们总是会抱怨。如果“负面”群体足够小,我认为您可以暂时安全地忽略他们,而专注于适应者。让他们获得出色的体验,负面的人也会随之跟进(或离开)。

2 个赞

有了主题市场,成本可以在多个买家之间分摊。主题创建者也有动力去创建许多主题。

1 个赞

该组件实际上并未提供全屏宽度。它将布局集中在左侧,但并未扩展。我已经实现了一个自定义主题,该主题可以扩展,但希望所有主题都能实现。

在 Horizon 上使用全屏组件

使用基于 Foundation 的自定义主题

不过你说得对,改变是困难的,很多用户已经适应了,有些用户仍然觉得困难。很难让所有人都满意。我只是想分享一下整个经历。

稍后将分享有关移动设备/平板电脑上引文问题的更多详细信息。

2 个赞