
Jekyll 3.9.4 版本发布解析为 Jekyll 3 系列引入 Ruby 3.3 兼容支持【免费下载链接】jekyll:globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby项目地址: https://gitcode.com/gh_mirrors/je/jekyllJekyll 3.9.4 是 Jekyll 3.x 稳定分支在 2023 年 12 月 28 日发布的维护性补丁版本其唯一目的是为 Jekyll 3 系列引入 Ruby 3.3 运行时兼容支持。本文以官方发布公告docs/_posts/2023-12-28-jekyll-3-9-4-released.markdown为核心骨架结合仓库内 History.markdown 与 docs/_docs/history.md 中的变更记录、以及 lib/jekyll/stevenson.rb 等源码实现完整解读这次修复的技术背景、具体改动、适用前提与升级建议帮助仍在使用 Jekyll 3.9 的用户理解为什么需要这次发布以及如何安全升级。一、发布背景Jekyll 3 分支为何需要持续维护Jekyll 3.9.x 是 Jekyll 3 系列的长期维护分支。尽管主仓库当前版本已演进到 4.xlib/jekyll/version.rb 中记录为4.4.1但 3.9 分支仍被大量既有站点、特别是依赖 GitHub Pages 默认环境的项目所使用因此维护团队会持续为其回移植Backport关键修复。从 History.markdown 的版本时间线可以清楚看到 3.9 分支的维护节奏版本发布日期核心内容3.9.32023-01-29放宽i18n1.x 与tzinfov1/v2 的版本限制含非半点时区偏移支持3.9.42023-12-28回移植 #9392为 v3.9.x 增加 Ruby 3.3 Logger 支持3.9.52024-02-12允许 Pages 被提取 Excerpt#95503.10.02024-06-23为 Jekyll 3 回移植 csv 依赖并引入 webrick 依赖发布公告中作者 parkr 的一句话点明了这次发布的性质This release, 3.9.4, is to bring Ruby 3.3 support to Jekyll.本次发布是为了让 Jekyll 支持 Ruby 3.3并引导读者到 docs/_docs/history.md 的#v3-9-4锚点查看完整变更记录——这也是官方文档中历史变更信息的权威入口。二、核心改动Ruby 3.3 Logger 兼容性修复2.1 变更记录原文在 History.markdown 与 docs/_docs/history.md 中3.9.4 的变更条目完全一致Bug FixesBackport #9392 for v3.9.x: Add support for Ruby 3.3 Logger (#9513)即将主线 PR #9392 的修复回移植到 3.9.x 稳定分支对应 PR #9513为 Jekyll 3 增加对 Ruby 3.3 内置Logger的支持。2.2 修复的底层对象Jekyll::Stevenson要理解这次修复需要先了解 Jekyll 的日志体系。Jekyll 的进程级日志器并非直接使用 Ruby 标准库Logger而是定义在 lib/jekyll/stevenson.rb 中的Jekyll::Stevenson类module Jekyll class Stevenson ::Logger def initialize formatter proc do |_, _, _, msg| msg.to_s end super($stdout, :formatter formatter) end # ... end end关键点在于Stevenson直接继承自 Ruby 标准库的::Logger。历史上它曾叫Jekyll::Logger因与标准库Logger产生继承冲突而更名为Stevenson见 History.markdown 中 v1.0.3 的变更记录Rename Jekyll::Logger to Jekyll::Stevenson to fix inheritance issue (#1106)。它通过自定义formatter只输出消息文本并覆写add/warn/error/close方法实现输出重定向错误级别以上写$stderr其余写$stdout。因此Jekyll 3.9.4 之前直接依赖 Ruby 3.3 之前版本的::Logger内部 API当 Ruby 3.3 调整Logger的内部实现主要是Logger::LogDevice与写入路径后旧版 Jekyll 3.9.x 在 Ruby 3.3 上可能出现日志写入异常或行为不一致。2.3 日志器的装配与调用链Stevenson实例通过 lib/jekyll.rb 中的Jekyll.logger方法惰性创建并包装为Jekyll::LogAdapterdef logger logger || LogAdapter.new(Stevenson.new, (ENV[JEKYLL_LOG_LEVEL] || :info).to_sym) endLogAdapterlib/jekyll/log_adapter.rb将:debug/:info/:warn/:error四个符号映射到::Logger的对应常量LOG_LEVELS并负责处理--verbose/--quiet等命令行参数的日志级别调整。也就是说整个 Jekyll 构建流程的日志输出都建立在::Logger兼容性之上——这正是 Ruby 3.3 变更会波及所有 Jekyll 3.9 用户的原因也是 3.9.4 必须发布的原因。三、为什么必须修复Ruby 3.3 的Logger变更影响面从源码结构看::Logger在 Jekyll 中被广泛使用其影响不限于日志文本本身全局日志入口Jekyll.logger是所有命令build、serve、doctor等输出进度、警告与错误信息的统一出口测试基础设施测试辅助代码 test/helper.rb 直接以Jekyll.logger Logger.new(StringIO.new, :error)的方式注入日志器来静默测试输出Logger的构造与写入语义变化同样会影响测试套件异常与退出码LogAdapter依据日志级别决定错误是否向上传播进而影响进程退出码。因此Add support for Ruby 3.3 Logger 并非锦上添花而是让 Jekyll 3.9 系列在 Ruby 3.3 运行时上保持原有日志行为stdout/stderr 分流、级别过滤、消息格式化的必要兼容补丁。与之对应的主分支 v4.3.32023-12-27 发布也同步合入了同一修复Backport #9392 for v4.3.x: Fix backward compatibility issues in the Logger见 History.markdown说明这是当时 Ruby 生态升级过程中 Jekyll 全系列的统一动作。四、本次发布的适用范围与前提4.1 适用场景正在使用Jekyll 3.9.x3.9.0 至 3.9.3、并计划或已经升级到Ruby 3.3的用户由 Bundler 管理依赖、以gem jekyll, ~ 3.9方式锁定版本的项目bundle update jekyll即可自动纳入 3.9.4在 CI/CD 或容器镜像中固定使用 Ruby 3.3 Jekyll 3 组合的构建管线。4.2 版本兼容前提3.9.4 属于 3.9 稳定分支的增量补丁不引入新功能、不改变既有配置项语义升级风险极低当前仓库主线4.4.1见 lib/jekyll/version.rb与 3.9.x 属于不同的大版本线如果追求最新功能应迁移到 4.x但若因 GitHub Pages 默认环境或其他原因必须停留在 3.x则3.9.4 是该分支在 Ruby 3.3 上的推荐版本从 History.markdown 看3.9.4 之后该分支还发布了 3.9.5 与 3.10.0因此实际选择时可将 3.9.4 视为Ruby 3.3 兼容的起点版本并关注后续维护版本。五、升级与验证建议5.1 升级方式对使用 Bundler 的站点在Gemfile中确认约束后执行bundle update jekyll bundle exec jekyll --version # 应输出 3.9.4对直接以 gem 方式安装的环境gem update jekyll --version 3.9.4 jekyll --version5.2 验证清单升级完成后建议在 Ruby 3.3 环境下执行以下验证构建验证bundle exec jekyll build应无 Logger 相关异常正常输出构建进度日志行为验证分别以--verbose、默认级别与--quiet运行确认输出级别过滤正常可对照 lib/jekyll/log_adapter.rb 中的adjust_verbosity实现--quiet强制:error级别--verbose切换为:debug错误输出验证触发一次构建错误如故意引入 Liquid 语法错误确认错误信息写入$stderr且进程退出码非零本地服务验证bundle exec jekyll serve正常启动监听无Logger兼容性报错。六、延伸从发布公告到完整变更历史发布公告正文非常精简其技术细节全部沉淀在变更历史中。读者可沿以下路径在仓库中交叉核对公告原文docs/_posts/2023-12-28-jekyll-3-9-4-released.markdownfront matter 记录作者 parkr、发布日期 2023-12-28、分类release仓库主变更日志History.markdown## 3.9.4 / 2023-12-28小节文档站点变更历史docs/_docs/history.md带{: #v3-9-4}锚点即公告中链接指向的位置相关发布公告docs/_posts/2023-01-29-jekyll-3-9-3-released.markdown上一补丁版本内容为放宽i18n/tzinfo依赖约束可对比理解 3.9 分支的维护模式。七、结语Jekyll 3.9.4 是一次典型的小而关键的兼容性补丁它没有新特性、没有配置变更却让庞大的 Jekyll 3 用户群体能够在 Ruby 3.3 上继续获得稳定、符合预期的构建体验。对于运维和依赖管理而言这类补丁往往比大版本升级更值得优先跟进——在 Ruby 运行时持续演进的背景下及时纳入维护分支的兼容修复是保证静态站点构建管线长期健康的最低成本手段。【免费下载链接】jekyll:globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby项目地址: https://gitcode.com/gh_mirrors/je/jekyll创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考