
OpenProject 6.1.1 发布说明工作包、时间线与搜索模块的关键缺陷修复解析【免费下载链接】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 仓库中的 6.1.1 官方发布说明docs/release-notes/6/6-1-1/README.md逐项解读该版本修复的核心缺陷及其背后的实现原理。通过对照当前仓库中的 Watcher、Spent time、关系页签、Textile 渲染、项目复制、全文搜索等模块的源码你可以理解这些 Bug 的成因、修复思路以及对应功能在 OpenProject 中的底层实现方式为排查同类问题或阅读源码提供参考。版本概览OpenProject 6.1.1 于 2016 年 11 月 29 日发布是一个以Bug 修复和稳定性改进为主的补丁版本。与功能迭代版本不同6.1.1 的核心价值在于修复工作包Work packages模块中多处影响日常协作的关键问题修复时间线Timeline聚合视图的加载缺陷修复项目复制、搜索结果大小写与分页问题消除传入邮件 cron 任务的弃用警告集中修复一批界面设计问题。工作包模块修复详解6.1.1 中工作包模块的修复数量最多下面按修复点逐一展开并结合当前仓库源码说明对应功能的实现机制。大量观察者Watchers场景下的选择问题修复内容在拥有过多潜在观察者的项目中无法正常选择观察者。在 OpenProject 中观察者Watcher机制用于让用户订阅工作包等对象的动态。从源码看该机制基于多态关联实现Watcher模型通过belongs_to :watchable, polymorphic: true关联到工作包、Wiki 页面、消息、新闻、论坛等多种对象并通过user_id的唯一性约束保证同一用户对同一对象只能关注一次app/models/watcher.rb。class Watcher ApplicationRecord belongs_to :watchable, polymorphic: true belongs_to :user validates :watchable, :user, presence: true validates :user_id, uniqueness: { scope: %i[watchable_type watchable_id] } # ... end观察者的添加/移除由 app/controllers/watchers_controller.rb 中的watch/unwatch动作驱动最终调用watched.set_watcher(user, watching)完成写入。当项目成员即潜在观察者数量很大时一次性加载全部候选用户的列表很容易造成渲染卡顿或选择器失效这正是 6.1.1 修复的痛点。修复后即便在成员众多的项目中观察者选择器也能正常工作。工作包“已花费时间”合计错误修复内容修复了工作包“Spent time”合计值显示错误的问题#24349。“Spent time”已花费时间是 OpenProject 中统计工作包工时投入的核心指标。其计算逻辑封装在 app/models/work_packages/spent_time.rb 中spent_hours返回该工作包及其所有子工作包的总工时并且会遵循当前用户的权限缺少view_time_entries或view_work_packages权限时结果可能是实际工时的子集def spent_hours(user User.current) if respond_to?(:hours) hours.to_f else compute_spent_hours(user) end || 0.0 end def compute_spent_hours(user) WorkPackage.include_spent_time(user, self) .pluck(Arel.sql(SUM(hours))) .first end6.1.1 修复的合计错误通常源于列表视图/聚合查询中对工时列求和时的边界条件如空值处理、权限过滤后的子集求和处理不当。当前版本中列表与查询的合计计算由 app/models/query/results/sums.rb 的all_total_sums/all_group_sums统一负责通过SUM(...)聚合 SQL 生成总计与分组小计这一套合计框架正是为规避此类合计偏差而演进的实现。关系页签链接触发整页刷新修复内容关系页签relation tab中的链接会导致硬刷新hard reload而不是直接在页内展示关联工作包#24265。关系页签用于展示工作包之间如“前置/后续”“阻塞/被阻塞”“重复/被重复”等关联关系。在 6.1.1 中点击关系页签内的链接会触发整页重新加载破坏单页应用的浏览体验。修复方向是让链接仅切换当前展示的工作包而无需重载整个页面。从当前源码看该交互已经演进为由专门的控制器与 Turbo 流驱动WorkPackageRelationsController负责创建/更新关系并通过respond_with_relations_tab_update局部刷新关系页签app/controllers/work_package_relations_controller.rb前端交互组件则集中在 app/components/work_package_relations_tab/ 目录例如index_component.rb、relation_component.rb与work_package_relation_dialog_component.rb实现关系的新建、编辑对话框与页内更新。Textile 代码块未阻止代码执行修复内容工作包描述中Textile 的pre与语法未能阻止代码执行。这是 6.1.1 修复中值得重视的安全类缺陷。OpenProject 的工作包描述使用 Textile 轻量标记语言渲染其中pre与行内代码本应作为“纯文本代码块”原样输出、转义内部 HTML若转义失效用户提交的描述中嵌入的 HTML/脚本代码可能在渲染时被当作真实标签执行构成 XSS跨站脚本风险。6.1.1 修复了 Textile 渲染管线中代码块/行内代码的转义遗漏确保代码内容以文本形式安全展示。“Spent time”链接在子目录部署下 404修复内容工作包表格上的“Spent time”链接在子目录subfolder部署方式下返回 404#24427。OpenProject 支持部署在域名子路径下如https://example.com/openproject/。该 Bug 的成因是工作包表格中的“Spent time”链接按绝对路径拼接未考虑应用挂载的子目录前缀导致跳转到错误路径。6.1.1 修正了该链接的路径生成逻辑使其在子目录部署下同样可用。当前仓库中此类链接生成统一通过url_for/link_to等 Rails 路由辅助方法并配合relative_url_root处理从机制上避免了硬编码绝对路径带来的部署迁移问题。工作包描述中换行符未显示修复内容工作包描述中的换行line breaks无法正确显示#24428。该问题与 Textile 渲染规则相关纯文本中的换行在部分标记语言中需要特定的换行指令才能渲染为可见换行。6.1.1 修复后工作包描述中用户输入的换行能够按预期显示不再被折叠为单行文本。时间线Timeline聚合视图加载修复修复内容以聚合aggregation方式显示的时间线在初始加载时无法展示。时间线是 OpenProject 甘特图功能的基础视图支持将多个项目/工作包的日程汇总展示。6.1.1 修复了聚合时间线在页面初始加载阶段不渲染的问题——此前该视图需要依赖额外的交互或刷新才会出现修复后加载即正确呈现。项目复制缺陷修复修复内容项目无法被复制#24323。项目复制是 OpenProject 中基于已有项目快速创建新项目的重要能力涉及工作包、Wiki、成员、自定义字段等大量关联数据的级联复制。6.1.1 修复了复制流程中的故障使项目复制操作恢复正常。当前仓库中该能力的服务实现位于 app/services/projects/ 目录如copy_service.rb等其核心思路是将源项目各模块的关联数据逐一迁移到新项目任何一步的异常都会导致整体复制失败这也解释了为何此类缺陷会以“项目无法复制”的整体表象出现。搜索模块修复详解6.1.1 对全局搜索做了两处针对性修复。搜索结果仅返回大小写敏感匹配修复内容搜索仅显示大小写敏感的匹配结果#24282。正常的全文搜索应同时命中大小写不同的写法如搜索openproject应同时匹配OpenProject。6.1.1 之前搜索行为退化为仅匹配完全同大小写的结果大幅降低搜索召回率。修复后搜索重新按大小写不敏感方式匹配。搜索结果分页失效修复内容搜索结果的分页功能损坏#24345。当搜索结果超过单页容量时分页链接无法正确跳转到后续页。6.1.1 修复了搜索结果的翻页逻辑保证大量结果可正常浏览。当前仓库中搜索控制器为 app/controllers/search_controller.rb分页展示统一由 app/helpers/pagination_helper.rb 辅助方法渲染页面参数与结果集范围的一致性正是分页正确性的关键。其他修复与改进传入邮件 cron 任务的弃用警告修复内容每当调用接收传入邮件incoming emails的 cron 任务时都会显示一条弃用警告#24306。OpenProject 支持通过邮件创建/更新工作包即“传入邮件”功能通常以 cron 定时任务调用 Rake 任务抓取邮箱实现。6.1.1 修复了该任务触发时输出弃用警告的问题消除运维日志中的噪音让真实的异常信息更易被识别。设计问题集中修复修复内容一批界面设计缺陷被集中修复涉及编号 #24263、#24274、#24286、#24289、#24297、#24301、#24334、#24335、#24339、#24372、#24373 等多个工作包。这些修复覆盖了不同页面上的样式与交互细节问题虽然单点影响较小但集中修复有效提升了 6.1.1 整体界面的完成度与一致性。社区贡献与后续信息6.1.1 的修复成果离不开社区反馈。官方发布说明特别感谢了 Marc Vollmer、Markus Hillenbrand、Nicolai Daniel 与 Christophe Mornet 等社区成员提交缺陷报告。OpenProject 的缺陷报告流程记录在 docs/development/report-a-bug/README.md 中核心步骤如下登录或注册 OpenProject 社区平台先用搜索栏确认是否已有相同缺陷报告有则补充评论若无打开缺陷表单创建新报告填写精确的主题与详细描述含复现前置条件、复现步骤、期望与实际行为可选附上截图或日志文件自托管用户可在复现时运行sudo openproject logs收集日志点击Create提交。如需了解更完整的修复清单可查阅仓库根目录的 CHANGELOG.md其中记录了各版本的详细变更6.1.1 及其后续版本的时间线与其他发布说明则位于 docs/release-notes/ 目录下按主版本号分目录组织便于按版本追溯功能演进与缺陷修复历史。【免费下载链接】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),仅供参考