从 2026.1 ESR 升级到 2026.7 的发现

首先,恭喜 Discourse 团队发布新的 ESR(长期支持版),并感谢为此付出的努力。将六个月内的发布版本整合到一个受支持的检查点中,涉及大量的工程工作。现在有了专门的发布网站和变更日志可供查阅,这使得此次调研比过去四年容易得多。

我目前使用的是 2026.1.5 ESR。在尝试寻找一种能让升级过程尽可能平稳的配置之前,我已经经历了一个又一个版本的更新。

在动手之前,我仔细研究了 2026.1.5 到 2026.7.0 之间的所有内容,并认为这些笔记对任何目前停留在 2026.1 版本、正在纠结 是现在打补丁,还是直接大跳版? 的人都有用。

我今天为了安全修复打补丁升级到了 2026.1.6,我将在下个月的第一周,当我有时间充分测试我的主题组件和其他事项时,再迁移到 2026.7.0。


version: stable 的陷阱!

如果你的 app.yml 像我的一样,写着:

  version: stable

…那么 你下次重建容器时,将会进入 2026.7.0,无论你是否有意为之。stableesr 的向后兼容别名,而 esr 始终指向 最新 的 ESR 版本,该版本今天刚刚变更。

据我所知,没有降级路径。所以,如果你仅仅为了获取安全修复而重建容器,你将会连同这六个月的巨大版本跳跃一起获得!

若要停留在 2026.1 并仅获取安全补丁,请显式固定版本:

  version: release/2026.1

若要迁移到新的 ESR 不想在六个月后再次被自动迁移:

  version: release/2026.7

2026.1 的支持将持续到 2026 年 9 月。 2026.7 的支持将持续到 2027 年 3 月。因此,无论怎样,大版本跳跃终将到来,唯一的区别是它是否按你的计划发生。


前置条件

PostgreSQL 15 现在是最小版本要求。 在容器内部检查你的版本:

cat /shared/postgres_data/PG_VERSION

我的返回值为 15,所以我没问题。如果你使用的是 13 或 14 版本,我相信你需要在进行版本大跳 之前 单独进行升级。

值得注意的是:容器镜像现在附带了 PG 18 和 PG 15,但我暂时拒绝升级,一次只改变一个变量。


停机时间?


先备份,并启用维护模式锁定论坛。

无需停机,但对于成熟的论坛来说,升级并非瞬间完成:

在我的 VPS 上,重建耗时不到 5 分钟;在大多数主机商那里,预计耗时约 10 分钟,但这很大程度上取决于你论坛的帖子数量,因此请预留 30 到 45 分钟的时间窗口。


安全性:你在 2026.1.5 上面临的风险

17 条安全公告 适用于 2026.1.5 版本。6 月 30 日之前发布的所有内容已在你的构建版本中修复。所有 17 个问题在 2026.1.6 和 2026.7.0 中均已修复,这使得“先打补丁”成为一个合理的选择。

  • 1 个严重 - 通过配色方案 Cookie 进行缓存投毒 / XSS
  • 2 个高危 - 通过格式错误的 HEIF 文件进行远程代码执行 (RCE);富文本编辑器中未转义的聊天记录用户名导致存储型 XSS
  • 13 个中危,1 个低危 - 审核队列、管理员操作日志、帖子操作和本地日期中的存储型 XSS;隐藏标签名称和标签描述泄露;受限主题标题通过规范化 URL 暴露;共享草稿标题/摘要泄露;通过大小写敏感比较绕过 Onebox 域名黑名单;AI 机器人会话窃听;AI 审核项可访问私信内容;聊天 Onebox 频道/线程 ID 不匹配;问答 JSON-LD 中输出隐藏的首帖摘要

如果你仅打补丁,使用 release/2026.1 + 重建即可关闭所有这些问题。


我的痛点:未经你请求就会发生的变化

这是过去几年我最想看到的章节。在跳转到 2026.7 时,以下是一些会自动到来的行为变更:

  1. Discourse 反应 (Reactions) 功能默认对所有站点启用。 该功能已于 7 月 21 日进入 stable 分支。如果你今天没有运行 Reactions,它即将到来。

  2. 正在移除“未分类”类别。 三个设置将从管理员界面隐藏 (allow_uncategorized_topics, suppress_uncategorized_badge, uncategorized_category_id),并在变更永久化后完全移除。目前作为可选退出项处理。

  3. rich_editor 站点设置已移除。 富文本编辑器现在是无条件的。用户个人的 composition_mode 偏好是选择 Markdown 和富文本之间模式的唯一方式。Markdown 预览切换按钮也已移除 - MD/RTE 模式切换按钮取而代之。

  4. 更简单的邮件主题行。 目前处于测试阶段。注意:启用此功能会覆盖你的 email_subject 站点设置,禁用则会恢复为默认值。因此,你在此处的任何自定义设置都可能丢失。在切换任何设置之前,请检查该设置。

  5. Horizon 高上下文主题卡片 于 6 月进入 stable 分支。仅适用于使用 Horizon 主题的站点,并且有一个主题设置可恢复为简单卡片。

好消息是:所有这些变更现在都通过“即将推出的变更 (Upcoming Changes)”系统提供,这意味着它们 包含在 2026.1.5 中。你会获得一个配置页面、提前通知、每项变更的可选退出选项,以及一个修复 (#39279),专门防止发布流程覆盖你已自定义的设置。

如果你像我一样,对版本之间设置四处移动感到沮丧,那么这个系统就是解决方案,而停留在 2026.1 意味着你使用的是该系统出现之前的构建版本。我跳版后做的第一件事就是浏览“即将推出的变更”,在自动应用之前,刻意设置每一个待处理项。


如果你运行自定义主题或组件

这是我预计将花费测试时间的地方,也是我今天不跳版的部分原因:

  • 所有待处理弃用项的管理员警告现在已启用。 如果你的自定义组件使用任何遗留功能,预计它们开始显示管理员通知。提前知道更好,但这需要一次审查。
  • .hbs.js.es6 文件扩展名的新弃用通知。检查你的组件文件命名。
  • 移除了遗留小部件 (Widget) 垫片,以及 discourse.breadcrumbs.*add-flag-propertyadd-header-panelbootbox 的弃用路径。
  • 插件出口 (Plugin Outlets) 现在可以被别名化和弃用,而不是静默失败。这是一个真正好的变更。重命名的出口会发出警告,而不是直接消失。
  • 主题设置从 JS 包移动到了预加载数据中,这改变了它们在启动时的可用性。如果你的组件在早期读取设置,值得验证。
  • 移除了遗留的移动模式站点设置,以及空的核心移动/桌面样式表。如果你的 CSS 分别针对移动设备和桌面端,升级后请在实际手机上进行测试。

底层变化:Ember 6.6 → 6.10,ember-cli 6.9 → 7.0.1,Rolldown 迁移完成,为主题和插件添加了 TypeScript 支持,并移除了大量 jQuery。

House Ads 用户: 现在禁止在 House Ads 中使用内联 JS,管理员 UI 已使用 FormKit 重建。house_ads_after_nth_root 现在也在嵌套回复视图中得到尊重。


值得注意的新功能

这六个月中突出了 37 个功能。我认为对一般社区论坛最重要的几个是:

  1. 即将推出的变更 (Upcoming Changes) - 上述的配置页面和发布系统。
  2. 嵌套回复 - 实验性的线程/树状主题视图,可按主题和类别配置,支持从主题列表批量启用,并重新设计了移动体验。
  3. 一次性邮件代码登录和注册 (enable_local_logins_via_code) - 无密码,目前处于 Alpha 阶段。注册只需邮箱和验证码。
  4. 新的管理员类别管理页面 以及简化的类别创建。包含类别及其类型的完整目录。
  5. 全面的批量操作 - 批量标签管理(添加/删除/替换)、批量置顶/取消置顶,以及对未激活用户的批量暂停,以及管理员 → 用户中的新激活状态过滤器。最后这个组合对于清理垃圾注册浪潮非常有效。

其他值得一提的功能:显式的默认主页设置、固定的表情符号组以及批量自定义表情符号导入/导出、标签名称现在允许使用点号、专用的标签编辑页面、嵌入的全应用模式、OAuth2 和 OpenID Connect 的组同步,以及内联 GitHub Onebox 上的实时 PR 状态图标。


为什么我先打补丁

以上内容没有任何一条是 迁移到 2026.7 的理由。单是“即将推出的变更”系统就值得去做,我将在下个月的第一或第二周进行迁移。

但安全修复在两个分支中都可用,这意味着我可以将紧急部分与需要测试的部分解耦。例如,富文本编辑器现在是无条件的。我相信在论坛周围逛逛,我会找到一条快速路径,希望如此。

今天打补丁关闭了所有安全公告。现在的跳版操作拥有了一个合适的时间窗口,我可以刻意浏览 即将推出的变更,并在没有关键 CVE 压力的情况下,检查我的主题组件在桌面和移动端的运行情况。

如果你也在 2026.1 且本周时间紧张,我建议你也这样做。如果你有时间,直接跳转到 release/2026.7,只需显式固定版本,并检查你的 Postgres 版本即可。

再次感谢团队。变更日志网站使这次调查比一年前痛苦得多。


披露:我使用了 AI 帮助我整理这篇文章;否则,我将没有时间来发布这篇文章。请指出任何我需要添加、删除或更改的内容。

该功能默认处于启用状态(不仅适用于新论坛,也适用于现有论坛),但在更新后,您仍可以通过 discourse_reactions_enabled 站点设置将其关闭。您仍然可以选择退出。

我不确定这是否行得通,原因有二。我认为使用 ESR(长期支持版)意味着您会错过那些在下一个 ESR 版本发布之前经历所有阶段的“即将推出的更改”。Simplified category setup 就是一个例子。每月更新的管理员有机会试用并提供反馈,而您只会像其他代码更改一样直接得到最终结果,没有“即将推出的更改”这一过渡阶段。
此外,您可以在功能被提升为 beta 版并自动启用之前更早地选择加入,或在之后选择退出——但您无法阻止其自动启用。(不过我认为这在您的情况下不是问题)

当然,查看 alpha 阶段的更改以了解即将推出的功能是有意义的。作为管理员,您可以在不影响用户的情况下测试该功能,并在执行启用该功能的更新后快速选择退出——但由于您使用的是 ESR 版本,不会有更新来推广这些“即将推出的更改”。在您将版本更新到更高版本之前,没有任何功能会自动推广给您;但这同时也意味着,您错过了在功能永久更改之前进行试用的机会,或者您可以试用当前的版本,但无法体验后续迭代中带来的改进。

@Moin,衷心感谢! 这也是我为什么在 ESR 更新上会犹豫一周左右的原因。大家对我错误之处等提供的反馈和纠正……比我独自摸索要有效得多。我会更新帖子的。谢谢!