Livid:在 macOS 上为 Jekyll 项目管理 Ruby 与 Gem 依赖(livid-jekyll-macos-ventura)
为什么静态博客需要关注 Ruby 环境
Jekyll 由 Ruby 生态中的 Gem 组成。博客站点不仅依赖 Jekyll 本身,也可能在 Gemfile 中声明主题、插件和其他构建工具。系统预装的 Ruby 版本、项目要求的版本和不同 Gem 的兼容范围若不一致,安装过程就可能失败,或者在升级后出现难以复现的构建问题。
Livid 的文章以 macOS Ventura 当时提供的 Ruby 2.6 为背景,记录部分 Gem 对版本提出要求后遇到的安装困难。作者因此使用 rbenv 安装较新的 Ruby,而不是直接覆盖系统自带运行环境。这个做法把系统 Ruby 与项目 Ruby 分开,减少对系统组件的影响,也让项目能够明确选择自己的运行版本。

用 rbenv 为项目选择 Ruby
文章记录的第一步是通过 Homebrew 安装 rbenv 和 ruby-build。rbenv 用于在同一台机器上安装并切换多个 Ruby 版本,ruby-build 则提供相应的版本构建能力。安装后需要按 shell 类型完成初始化,让终端能够识别 rbenv 提供的命令。
接下来,作者在 Jekyll 站点目录中安装 Ruby 3.1.3,并将该目录配置为使用这个版本。这样切换到其他项目时,可以保留各自所需的 Ruby 版本,而不必让所有项目共享同一套环境。排查时可先查看 ruby -v,确认当前终端实际使用的版本,再进行后续 Gem 安装。
环境管理的重点是“确认项目使用的版本”,而不是盲目追求最新版本。Ruby 版本需要与站点的 Gem 依赖相容;团队协作时还应把版本要求记录在项目中,避免不同机器使用不一致的解释器。rbenv 只帮助管理版本,不能自动解决 Gem 之间的兼容冲突。
Bundler 与站点依赖
文章接着安装 Bundler 和 Jekyll,再通过 Bundler 根据 Gemfile 安装站点其余依赖。Gemfile 用于描述项目需要的 Gem,锁文件保存具体解析结果,使开发环境和持续集成能够使用相同依赖组合。维护静态站点时,直接依赖和主题插件都应放在项目定义中,减少依靠机器全局状态造成的差异。
Livid 的安装记录还将 Bundler 的依赖安装路径设在站点目录下的 vendor/bundle。把 Gem 放在项目内有助于按项目隔离依赖,也便于理解某个站点需要哪些组件。代价是该目录会占用仓库工作区空间,通常不应作为源码提交内容。

排除本地依赖目录
当依赖被安装在 vendor/bundle 时,项目需要配置忽略规则,避免把本地 Gem 文件混入版本库。文章建议在 Jekyll 配置中排除 vendor,并在 .gitignore 中忽略 vendor/ 与 .bundle/。这样源码仓库保留站点定义与依赖清单,构建工具则在本地或部署环境重新安装具体文件。
忽略规则应与部署方式匹配。如果发布流程依赖 CI 下载 Gem,就要确保锁文件、Ruby 版本和安装步骤都被正确记录;如果构建服务使用缓存,也要明确缓存目录如何失效和更新。忽略本地文件并不等同于忽略依赖声明,Gemfile 和锁文件仍是复现环境的重要输入。
安装问题的排查顺序
遇到 Gem 安装失败时,可以依次确认 Ruby 版本、当前目录是否选中了预期版本、Bundler 是否读取正确的 Gemfile,以及失败 Gem 的版本约束。先检查环境状态,再决定是否调整依赖,比直接删除锁文件或全局安装更新版本更容易定位原因。
文章提到遇到 Gem 问题时可以尝试删除 Gemfile.lock 并重新安装。不过在协作项目中,锁文件记录了依赖解析结果,随意删除可能导致一批依赖被升级或降级,因此应先检查失败原因,必要时在分支中重新生成锁文件并对比变化。只有确认锁文件本身与目标 Ruby 环境不兼容时,才考虑更新,并通过站点构建验证结果。
保留文章的时间背景
这篇安装记录发表于 2023 年,针对 macOS Ventura 和 Ruby 3.1.3 的当时环境。Ruby、Jekyll、Bundler 及 Gem 的版本都会变化,因此这些具体命令和兼容结论不应直接当作当前最新安装指南。它的长期参考价值主要在于环境管理的思路:使用版本管理器隔离 Ruby,为项目明确依赖,并将本地安装目录排除出仓库。
准备在当前环境搭建 Jekyll 时,应先查看 Jekyll 官方文档、目标 macOS 版本和项目锁文件,确认适合的 Ruby 版本后再执行安装。若维护旧站点,也可以先在隔离的 Ruby 环境复现原来的版本组合,再计划升级主题、插件和构建依赖,避免一次性变更过多因素。
Livid 站点的其他内容
Livid 的文章归档还包含 Jekyll、Docker、IPv6、macOS、游戏与软件主题,设计作品则通过独立入口展示。读者可以从一篇安装记录继续查找站点生成、开发环境或其他数字工具相关内容。RSS 和 JSON Feed 为持续关注新增文章提供了订阅方式。
整体来说,这篇文章呈现了一个维护静态博客时常见的环境问题:系统 Ruby 与项目依赖要求不一致。通过 rbenv 选择 Ruby、用 Bundler 管理 Gem、隔离本地依赖目录并保留锁文件,可以让构建环境更清晰。复用其思路时,应把具体版本替换为当前项目文档确认的组合。