Skip to content

附录 E:版本兼容与升级 ​

这里列出当前支持的版本、升级注意事项,以及 ClassIsland 插件与主程序的兼容关系。

版本线 ​

Novora 从 v2.7 起分为三条互相衔接的版本线:

版本主题状态
v2.7.x稳定与质量:Hook 依赖修复、共享类型契约、数据库 schema 门禁已完成(v2.7.6)
v2.8.x考试管理基础:考试记录、生命周期、诊断日志、界面重组当前版本
v2.9.x 起设备与错误体系、作者中心、远程诊断规划中

版本与文档覆盖 ​

版本是否仍在维护更新说明文档站更新日志
V2.8.0是(当前版本)有
V2.7.4 – V2.7.6作为修补批次记录有(合并一篇)
V2.7.0 – V2.7.3只做安全与严重问题修复有
V2.6.x 及更早不再更新仅索引链接

更早的完整记录见 GitHub Releases。

推荐使用哪个版本 ​

  • 新部署:直接使用最新稳定版 V2.8.0。
  • 已在运行的部署:保持在与文档一致的版本;升级前阅读对应版本的更新说明。
  • 有学校自定义代码:在升级分支上合并上游、解决冲突并测试后再进入生产。

数据库结构版本 ​

Novora 使用 schema 版本门禁管理表结构,不需要手工执行 SQL:

组件说明
核心 schemaV2.7.5 起记录版本号,健康检查会报告当前版本
考试记录V2.8.0 新增 exam_records 等表,升级时自动创建并回填
考试公告V2.8.0 新增 exam_announcements 的排版样式与正文图片,以及 exam_announcement_images 表
诊断日志V2.8.0 新增诊断日志相关表,升级时自动创建

首次登录和首次 API 调用时,系统会按需建表或补列。不要从其他教程复制 SQL 手工执行,错误的字段定义会导致后续自动升级失败。

数据维护脚本 ​

日常升级不需要跑这些脚本;只有出现下面两种情况时才需要,跑之前先备份数据库。

场景命令说明
旧考试的记录缺少时间窗与时间戳npm run backfill:record-timestamps回填旧考试的时间窗与记录时间戳
删除考试后记录表留下孤儿行npm run purge:orphan-records默认只统计不删除;确认后加 --yes,需要连带删除操作日志时再加 --with-operations

孤儿行是指「快照里已经删掉、exam_records 里还留着」的记录。界面按快照过滤,正常情况下看不到, 但会一直累积;判断口径与 GET /api/exams?resource=record-consistency 的 orphaned 一致。 实际执行步骤见 Vercel 日常维护与本地更新与维护。

升级路径 ​

一般规则 ​

  • 同一大版本内(例如 2.7.3 → 2.7.6)可以直接升级;
  • v2.7.x → v2.8.x 可以直接升级,表结构和旧数据会自动兼容;
  • 跨越大版本(v1 → v2)前必须单独验证,不能假设所有自定义业务数据自动迁移。

v2.7.3 → v2.8.0 的额外说明 ​

这一版把考试管理从「整体覆盖的 JSON 快照」升级为「关系模型 + 生命周期状态机」,但旧客户端读取契约不变:

  • exam_data.majors 仍是权威存储,旧客户端的离线队列、ETag、三方合并行为不变;
  • exam_records 是服务端单向投影,可随时从 majors 重建,回滚不丢数据;
  • ClassIsland 插件读取的考试数据格式不变,插件不需要同步升级;
  • 设备心跳计算当前考试的逻辑不变。

因此升级后不需要通知教室大屏或插件做额外操作。

操作方式的变化(升级前务必确认) ​

同一批变化里,面向管理员的操作方式改了,和旧版不一样:

  • 新建考试创建即发布,不再需要点「发布」,也不再产生草稿(复制出来的考试例外);
  • 没有「开考」按钮:到计划开始时间由系统自动开考;
  • 提前收场改为「申请停止」,由系统按「到点 → 教室端全部结束 → 10 分钟无在线设备」判定后结束, 兜底入口是「强制结束」;
  • 复制考试先落草稿,改完再发布。

习惯旧流程的学校,建议升级后先按创建一场大型考试走一遍。

ClassIsland 插件兼容 ​

插件通过 /api/exams 与 Novora 通信,配对令牌有效期 5 分钟。

事项说明
API 版本插件使用的接口在 v2.7 / v2.8 保持兼容
数据格式按班级返回的有效考试时间线格式未变
配对方式一次性令牌 + 浏览器选择年级班级
升级主程序后不需要重新配对;设备管理中的关联状态保持
解除设备绑定后插件凭据被撤销,需要重新配对

插件源码在 integrations/ClassIsland.ExamReminder,也可从 ClassIsland.ExamReminder 仓库 获取。

兼容性保留标识 ​

升级时不要重命名以下内容,否则会影响本地缓存、设备绑定和插件兼容:

text
exam-board-*          localStorage 键
exam-board-offline    IndexedDB 名称
exam-board:*          浏览器事件名
novora-shell-*        Service Worker 缓存前缀
novora-runtime-*      Service Worker 运行时缓存前缀

Service Worker 缓存前缀在发布新版本时只更新末尾的版本号,不要改变前缀本身。

升级前后的检查清单 ​

升级前:

  • [ ] 阅读目标版本的更新说明
  • [ ] 备份数据库
  • [ ] 记录当前版本号和提交号
  • [ ] 避开考试和上课时段
  • [ ] 通知使用方

升级后:

  • [ ] 管理员登录正常
  • [ ] 后台能读取和保存数据
  • [ ] 教室大屏显示正确
  • [ ] PDF 能正常下载
  • [ ] ClassIsland 同步正常(如启用)
  • [ ] 设置页的版本号已变化
  • [ ] 新建一场考试后是「已发布」状态,没有多出草稿
  • [ ] 到点后系统自动开考,操作记录里能看到自动开考与结束

需要帮助时 ​

带上以下信息到官方交流群 1067566386 提问:

text
当前版本:
目标版本:
部署方式:Vercel / Docker / Node
现象与操作步骤:
请求 ID:

不要发送数据库连接串、管理员密码、Deploy Hook 或恢复密钥。

Novora 部署与维护文档