OpenProject 14.1.1 版本发布解读:等待弹窗超时、提醒邮件调度与 API 自定义字段显示的修复
2026/9/16 11:18:26 网站建设 项目流程

OpenProject 14.1.1 版本发布解读:等待弹窗超时、提醒邮件调度与 API 自定义字段显示的修复

【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject

OpenProject 14.1.1 是 2024 年 6 月 4 日发布的补丁版本,集中修复了四个影响实际使用的问题:前端等待弹窗(Waiting modal)无法超时、提醒邮件调度任务在长时间中断后持续失效、available_projectsAPI 端点错误展示自定义项目字段,以及历史数据库迁移中的一处拼写错误。本文以官方发布说明(docs/release-notes/14/14-1-1/README.md)为骨架,逐条解析每个修复背后的模块职责、源码实现与验证路径,帮助运维与开发人员理解该版本的技术内涵,并判断升级影响面。

版本概览:发布日期与升级建议

项目内容
版本号OpenProject 14.1.1
发布日期2024-06-04
版本类型补丁版(Patch Release)
修复内容4 项 Bugfix(含前端交互、后台任务调度、API 展示、数据库迁移)

发布说明明确指出:"The release contains several bug fixes and we recommend updating to the newest version."(本次发布包含若干缺陷修复,官方建议升级到最新版本)。该版本属于 14.1.x 系列的小版本迭代,修复项均不涉及破坏性变更,属于"收到升级建议、可平滑升级"的常规补丁版本。

修复一:等待弹窗不再无限等待——Waiting modal 超时修复(#55016)

Bugfix:Waiting modal doesn't time out(等待弹窗不会超时)

这是本次发布中唯一的前端(前端源码位于 frontend/src)交互类修复。OpenProject 的 Angular 前端在执行保存、上传、异步请求等耗时操作时,会向用户展示一个"正在处理"的等待弹窗(Waiting modal),其设计语义是:操作完成后自动关闭,若操作长时间未完成或网络异常,弹窗应依据预设的超时逻辑结束等待状态并给出反馈。

该问题描述的是:在某些场景下,等待弹窗会一直停留在界面上,超时机制没有按预期触发,用户既无法获知操作状态,也容易误以为页面卡死。14.1.1 修复了超时判断失效的问题,使等待弹窗在超时后能够正常结束并恢复页面交互。可以推断,修复点位于前端弹窗组件的时间控制逻辑中,与异步请求的状态订阅(如操作完成、失败、超时等状态分支)相关;对于最终用户而言,该修复消除了"弹窗卡死、操作无反馈"的体验缺陷。

修复二:提醒邮件调度任务中断后不再失效(#55223)

Bugfix:ScheduleReminderMailsNotificationsJob constantly broken after 24 hour outage - no reminder mails send(提醒邮件调度任务在 24 小时中断后持续损坏,提醒邮件不再发送)

这是本次发布中技术含量最高的一项修复,涉及 OpenProject 的通知与提醒邮件后台调度体系。用户可以为工作包设置个人提醒(reminder),系统会依据提醒时间定时生成通知并发送邮件。这一体系由多个 ApplicationJob 协作完成,从当前仓库源码可以还原其完整调用链:

  1. 周期调度入口Notifications::ScheduleReminderMailsJob(app/workers/notifications/schedule_reminder_mails_job.rb)混入Cron::QuarterHourScheduleJob,即每 15 分钟被 cron 触发一次。其perform逻辑为:
def perform return unless lower_boundary.present? && upper_boundary.present? User.having_reminder_mail_to_send(lower_boundary, upper_boundary) .pluck(:id) .each do |user_id| Mails::ReminderJob.perform_later(user_id) end end

它先计算本批次的时间下界(lower_boundary)与上界(upper_boundary),再通过User.having_reminder_mail_to_send筛选出在该时间窗口内有待发送提醒邮件的用户,逐个投递Mails::ReminderJob

  1. 单用户提醒投递Mails::ReminderJob(app/workers/mails/reminder_job.rb)负责为单个用户汇总并发送提醒邮件。

  2. 提醒生成与即时邮件Reminders::ScheduleReminderJob(app/workers/reminders/schedule_reminder_job.rb)通过Notifications::CreateService创建提醒通知,并依据用户偏好recipient.pref.immediate_reminders[:personal_reminder]决定是否立即调用Mails::Reminders::NotificationDeliveryJob(app/workers/mails/reminders/notification_delivery_job.rb)发送即时邮件,邮件发送后会将通知标记为mail_alert_sent

该 Bugfix 描述的场景是:当系统(如数据库、队列或服务)经历约 24 小时的中断后,提醒邮件调度任务会持续处于损坏状态,导致后续所有提醒邮件都无法发出。可以推断,根因与调度任务内部依赖的时间窗口边界(lower_boundary/upper_boundary)在中断后失去有效取值、或任务因异常而无法在后续周期中自愈有关——源码中return unless lower_boundary.present? && upper_boundary.present?这一防御性判断正是对这类边界条件的兜底。14.1.1 的修复使调度任务在长时间中断后能够恢复正常的周期执行,避免提醒邮件静默丢失。

修复三:available_projects API 端点自定义项目字段显示错误(#55381)

Bugfix:The available_projects api endpoint displays custom project fields incorrectly(available_projects API 端点错误显示自定义项目字段)

available_projects是 API v3 中一组用于枚举"当前用户可操作的项目集合"的端点,在成员管理、版本管理与工作包表单等场景中被广泛使用。从仓库源码看,这类端点分布在多个资源下:

  • 成员管理:API::V3::Memberships::AvailableProjectsAPI(lib/api/v3/memberships/available_projects_api.rb)
  • 版本管理:API::V3::Versions::AvailableProjectsAPI(lib/api/v3/versions/available_projects_api.rb)
  • 工作包创建 / 编辑:API::V3::WorkPackages::AvailableProjectsOnCreateAPIAvailableProjectsOnEditAPI(lib/api/v3/work_packages/available_projects_on_create_api.rb、lib/api/v3/work_packages/available_projects_on_edit_api.rb)

以成员管理端点为例,其实现如下:

class AvailableProjectsAPI < ::API::OpenProjectAPI after_validation do authorize_in_any_project(:manage_members) end resources :available_projects do get &::API::V3::Utilities::Endpoints::Index.new(model: Project, scope: -> { Project.allowed_to(User.current, :manage_members) }) .mount end end

要点有两个:

  • 权限控制:访问端点前必须通过authorize_in_any_project(:manage_members)校验,即用户需在至少一个项目中拥有"管理成员"权限;
  • 数据范围:返回的项目集合由Project.allowed_to(User.current, :manage_members)限定,只包含当前用户具备manage_members权限的项目,而非全部项目。

该 Bugfix 描述的"错误显示自定义项目字段"问题,指向端点在序列化项目时对自定义字段(Custom Field)的呈现异常——available_projects结果中的项目若带有自定义项目字段(ProjectCustomField),其值可能被错误地渲染或映射。仓库中为这类端点提供了完整的请求级测试,例如 spec/requests/api/v3/memberships/available_projects_resource_spec.rb 通过构造带不同权限角色的用户与项目,逐一断言端点返回的项目集合及字段行为;类似地还有 spec/requests/api/v3/versions/available_projects_resource_spec.rb。14.1.1 修复后,依赖该端点的成员管理、版本归属设置等工作流可获得正确的自定义项目字段数据。

修复四:历史数据库迁移中的拼写错误(#55421)

Bugfix:Typo in historic migration(历史迁移中的拼写错误)

OpenProject 的数据库结构演进由 db/migrate 目录下的大量迁移文件管理(当前仓库含 269 个迁移文件)。历史迁移(historic migration)指早期版本中已经执行过的迁移,正常情况下不会在已升级的实例上再次运行,但其内容仍可能产生实际影响:

  • 在从旧版本直接执行完整迁移序列的安装场景中,历史迁移会被真实执行;
  • 部分迁移脚本或校验逻辑会以迁移文件内容为参照;
  • 迁移记录(schema_migrations 记录)的完整性检查可能依赖迁移文件的元信息。

"Typo in historic migration"即某个历史迁移文件中存在拼写错误(如列名、索引名或方法名拼写不一致)。这类错误通常不阻塞已正常运行的实例,但在特定条件下(如重建数据库、基于迁移文件生成 schema、或依赖该迁移定义做一致性校验)可能引发异常。14.1.1 修正了该历史迁移文件中的拼写问题,消除了潜在的迁移执行隐患。

如何验证与跟进本版本

  • 升级路径:14.1.1 属于 14.1.x 补丁版本,官方在发布说明中明确建议升级。升级前建议先备份数据库,并参照仓库内提供的部署与运维文档(docs/installation-and-operations)执行标准升级流程。
  • 重点回归项:依据本版本的四个修复点,升级后建议针对性验证:① 前端耗时操作时等待弹窗能否在超时后正常结束;② 模拟或确认提醒邮件调度任务在长时间中断后能否恢复发送;③ 通过 API v3 的available_projects端点(成员、版本、工作包表单等入口)检查自定义项目字段展示是否正确;④ 数据库迁移记录与 schema 状态是否一致。
  • 源码对照:提醒邮件调度相关实现可对照 app/workers/notifications/schedule_reminder_mails_job.rb 与 app/workers/mails/reminder_job.rb;API 端点实现可对照 lib/api/v3/memberships/available_projects_api.rb;请求级测试可对照 spec/requests/api/v3/memberships/available_projects_resource_spec.rb。

综上,OpenProject 14.1.1 虽为小型补丁版本,但其四项修复横跨前端交互、后台提醒调度、API 数据呈现与数据库迁移四个层面,其中提醒邮件调度在长时间中断后的自愈修复与available_projects端点的字段呈现修复,对生产环境的通知可靠性与 API 集成稳定性具有直接价值,值得及时跟进升级。

【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询