iOS 版 DiscourseHub 中,编辑后的帖子偶尔会显示为旧内容,需刷新才更新

我遇到了一个间歇性问题:编辑后的帖子能够成功保存,但在 iOS 上的 DiscourseHub 中,已经渲染的帖子有时仍显示旧内容,直到我刷新该主题。

环境

生产站点是我自己自建的 Discourse 安装实例,我将其作为个人学习档案私有使用。

今天我复现此问题时,环境如下:

  • 客户端: iPhone 上的 DiscourseHub
  • iOS 版本: 27.0.1
  • 生产环境 Discourse 版本: v2026.10.0-latest +112
  • 站点类型: 自建,私有学习档案
  • 默认 iOS 浏览器: iCab Mobile

由于一个无关的本地下载问题,我将默认浏览器更改为 iCab Mobile。然而,这次复现是在我在 DiscourseHub 内部使用 Discourse 站点时发生的,而不是在打开外部浏览器之后,因此我目前认为默认浏览器的选择与此无关。

实际工作流程

我注意到此问题的主题包含大约 50 个帖子,代表课程幻灯片。

我通常的工作流程是:

  1. 创建一个包含课程幻灯片图片的帖子;
  2. 稍后按顺序处理该主题;
  3. 编辑每个现有帖子;
  4. 在已发布的幻灯片图片下方添加 OCR 转录文本/笔记;
  5. 按下保存编辑(Save Edit)并继续处理下一张幻灯片。

因此,这些并不是合成的高速编辑:这是一个正常的学习工作流程,我正在逐步为课程幻灯片图片帖子添加 OCR 转录文本。

对于该主题中较早的帖子,按下保存编辑后,显示的帖子立即被新编辑的内容替换,符合预期。

在同一主题的后期,我遇到了以下情况:

  1. 我编辑了帖子并添加了 OCR 文本。
  2. 按下保存编辑。
  3. 编辑成功保存。
  4. DiscourseHub 中显示的帖子仍保留其先前内容。
  5. 刷新页面后立即显示了已保存的编辑内容。

因此,编辑本身似乎已经成功。过时的部分似乎是帖子的已加载客户端表示。

开发测试

然后,我从当前的上游 main 分支创建了一个完全干净的开发实例:

833e1576d47 DEV: Update README.md note on self-hosting (#44320)

我生成了一个包含 60 个帖子的主题,每个帖子中都有一张图片,以模拟生产主题的结构。

然后,我在 Linux 上的 Firefox 中重复了该工作流程,将文本编辑到现有的图片帖子中。

在第一次测试中,我最初在帖子 19 附近看到了一个可能的过时更新。
然而,在更仔细地重复实验后——包括创建一个全新的 60 帖子主题并按顺序编辑帖子——我无法在当前的 main 分支上的 Firefox/Linux 中复现生产环境的行为。

那里的编辑在按下保存编辑后立即重绘了帖子,包括远超主题中第一组帖子的部分。

这让我对主题分页或正常的 20 帖子流块本身是原因这一观点的信心降低了。

下一步测试

生产环境的复现是在 iOS 上的 DiscourseHub 中,而不是主屏幕 PWA。

因此,我计划进行的下一个对比是:

  • 当前的上游 Discourse 开发实例;
  • 相同的 60 帖子图片主题;
  • 同一台运行 iOS 27.0.1 的 iPhone;
  • 首先使用 DiscourseHub;
  • 在同一台 iPhone 上使用 Safari 作为对照;
  • 可选地将主屏幕 Web 应用作为另一个对比;
  • 使用相同的 OCR 风格工作流程按顺序编辑帖子。

目前我的开发笔记本电脑连接在 eduroam 上,因此直接将其本地开发服务器暴露给 iPhone 并不简单。

在 DiscourseHub 中在同一台 iPhone 上运行当前 main 分支的开发实例,是否是缩小问题范围的下一步正确操作?

如果是,Discourse 团队是否有首选的方式来将本地开发实例暴露给 iPhone / DiscourseHub 进行测试,理想情况下是通过 HTTPS?

在下一次发生时,我也可以让过时的帖子保持未刷新状态并捕获屏幕录制,以便可以直接将成功的保存/服务器状态与已打开的 DiscourseHub 客户端显示的内容进行比较。

可能相关的观察

从高层次来看,这种行为与我之前在处理 PR #43285,“在主题列表中刷新事件日期” 时遇到的过时客户端状态问题相似。

那是不同的代码路径,我并不是说它是同一个 bug。

然而,可观察到的故障是相似的:服务器端状态可能是正确的,而已加载的客户端继续显示过时状态,直到相关的刷新/重新水合发生。

对于事件日期问题,我能够根据时序在不同的已打开客户端上观察到 A/B 情况。

这让我怀疑这个编辑问题是否也位于通知/模型更新/渲染链中的某处,而不是编辑本身失败。

我也注意到了这个问题(不过,坦白说,我并没有读完整个报告)。