Ruby3.1.2执行bundle exec jekyll build报错排查
Jekyll 3.8.6 + Ruby 3.1.2 构建报错排查方案
核心原因是Jekyll 3.8.6发布时Ruby 3.x尚未推出,Ruby 3.0之后移除了部分默认标准库、调整了方法参数校验逻辑,老版本依赖链存在多处兼容问题,按以下步骤逐一修复即可:
1. 清理旧依赖锁定状态
- 直接删除项目根目录下的
Gemfile.lock,旧锁文件会固定拉取未适配Ruby3的历史版本依赖,之前单独加gem触发连锁报错就是这个原因 - 保留Gemfile里的
gem "webrick"配置,webrick从Ruby 3.0开始被移出标准库,这个依赖是必须的 - 把之前添加的rexml依赖调整为
gem "rexml", "~> 3.2.5",不要用3.2.0-3.2.4版本,这几个版本调整了内部文件结构,会触发kramdown的加载错误
2. 修复参数数量不匹配报错
你遇到的wrong number of arguments (given 2, expected 1)是老版本依赖的已知Ruby3兼容bug,直接在Gemfile里锁定以下依赖的兼容补丁版本即可:
gem "forwardable-extended", "~> 2.6.1":2.6.0版本的委托方法没有适配Ruby3的参数传递规则,2.6.1是专门修复该问题的补丁版gem "liquid-tag-parser", "~> 1.9.1":1.9.0版本存在和forwardable-extended同款的参数校验问题- 如果升级前两个依赖后还是报同类错误,直接重装jekyll-assets 3.0.x分支最新补丁版即可,不要用早期的3.0.12初始发布版
3. 验证kramdown依赖适配
最开始触发的cannot load such file -- rexml/parsers/baseparser错误,在rexml锁定到3.2.5以上版本后会自动修复,不需要额外升级kramdown到2.x版本,避免触发其他插件的兼容问题。
4. 重新执行构建
- 先运行
bundle clean --force清理本地残留的旧版本gem缓存 - 运行
bundle install重新拉取所有适配后的依赖 - 再执行
bundle exec jekyll build即可正常构建
兜底兼容方案
如果上述步骤操作后还是存在其他零散的Ruby3兼容报错,直接把Jekyll版本升级到3.x分支的最终维护版3.9.5即可,只需要把Gemfile里的jekyll依赖改为gem "jekyll", "~> 3.9.5"。
不要直接升级到Jekyll 4.x,4.x修改了大量插件API,和你当前使用的jekyll-assets 3.x版本不兼容,会触发更多难以排查的依赖错误。
3.9.5版本完全兼容Jekyll 3.8的配置和插件API,专门做了Ruby3全系列适配,不需要修改任何站点代码。
内容的提问来源于stack exchange,提问作者faraaz
相关产品推荐
相关产品推荐

