执行bundle exec jekyll serve报错:bundler加载失败及NoMethodError
Jekyll启动报错:bundler: failed to load command: jekyll
环境信息
macOS 12.0.1 jekyll 4.2.2 ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]
详细报错(执行bundle exec jekyll serve --trace)
bundler: failed to load command: jekyll (/Users/Sixian/.gem/ruby/2.7.1/bin/jekyll) /Users/Sixian/my-digital-garden/_plugins/empty_front_matter_note_injector.rb:11:in `block in <top (required)>': undefined method `relative_directory' for nil:NilClass (NoMethodError) Dir.glob(site.collections['notes'].relative_directory + '/**/*.md').each do |filename| ^^^^^^^^^^^^^^^^^^^ from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/hooks.rb:103:in `block in trigger' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/hooks.rb:102:in `each' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/hooks.rb:102:in `trigger' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/site.rb:38:in `initialize' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/commands/build.rb:30:in `new' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/commands/build.rb:30:in `process' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/command.rb:91:in `block in process_with_graceful_fail' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/command.rb:91:in `each' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/command.rb:91:in `process_with_graceful_fail' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/lib/jekyll/commands/serve.rb:86:in `block (2 levels) in init_with_program' from /Users/Sixian/.gem/ruby/2.7.1/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `block in execute' from /Users/Sixian/.gem/ruby/2.7.1/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `each' from /Users/Sixian/.gem/ruby/2.7.1/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `execute' from /Users/Sixian/.gem/ruby/2.7.1/gems/mercenary-0.4.0/lib/mercenary/program.rb:44:in `go' from /Users/Sixian/.gem/ruby/2.7.1/gems/mercenary-0.4.0/lib/mercenary.rb:21:in `program' from /Users/Sixian/.gem/ruby/2.7.1/gems/jekyll-4.2.2/exe/jekyll:15:in `<top (required)>' from /Users/Sixian/.gem/ruby/2.7.1/bin/jekyll:25:in `load' from /Users/Sixian/.gem/ruby/2.7.1/bin/jekyll:25:in `<top (required)>' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli/exec.rb:58:in `load' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli/exec.rb:58:in `kernel_load' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli/exec.rb:23:in `run' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli.rb:483:in `exec' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli.rb:31:in `dispatch' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/cli.rb:25:in `start' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/exe/bundle:48:in `block in <top (required)>' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors' from /Users/Sixian/.gem/ruby/2.7.1/gems/bundler-2.3.18/exe/bundle:36:in `<top (required)>' from /Users/Sixian/.gem/ruby/3.0.0/bin/bundle:23:in `load' from /Users/Sixian/.gem/ruby/3.0.0/bin/bundle:23:in `<main>'
gem环境信息(执行gem env)
- RUBYGEMS VERSION: 3.3.11 - RUBY VERSION: 3.1.2 (2022-04-12 patchlevel 20) [x86_64-darwin21] - INSTALLATION DIRECTORY: /Users/Sixian/.gem/ruby/2.7.1 - USER INSTALLATION DIRECTORY: /Users/Sixian/.gem/ruby/3.1.0 - RUBY EXECUTABLE: /usr/local/opt/ruby/bin/ruby - GIT EXECUTABLE: /usr/local/bin/git - EXECUTABLE DIRECTORY: /Users/Sixian/.gem/ruby/2.7.1/bin - SPEC CACHE DIRECTORY: /Users/Sixian/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /usr/local/Cellar/ruby/3.1.2/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-darwin-21 - GEM PATHS: - /Users/Sixian/.gem/ruby/2.7.1 - /Users/Sixian/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - "gem" => "--no-document" - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /Users/Sixian/.gem/ruby/3.0.0/bin - /usr/local/opt/ruby/bin - /usr/local/lib/ruby/gems/3.0.0/bin - /usr/local/opt/ruby/bin - /usr/local/lib/ruby/gems/3.0.0/bin - /Users/Sixian/.gem/ruby/3.0.0/bin - /usr/local/opt/ruby/bin - /usr/local/lib/ruby/gems/3.0.0/bin - /Users/Sixian/.gem/ruby/2.7.0/bin - /Users/Sixian/.gem/ruby/2.7.1/bin - /Users/Sixian/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0/bin - /Users/Sixian/.rubies/ruby-2.7.1/bin - /usr/local/bin - /Users/Sixian/.bin - /usr/local/bin - /usr/bin - /bin - /usr/sbin - /sbin - /Users/Sixian/.gem/ruby/3.0.0/bin - /usr/local/opt/ruby/bin - /usr/local/lib/ruby/gems/3.0.0/bin - /Users/Sixian/.gem/ruby/2.7.0/bin - /Users/Sixian/.bin
问题背景
尝试创建基于文件夹的文章页面,修改_config.yml添加Collections后,执行bundle exec jekyll serve时出现上述报错,自身是Jekyll和Ruby新手。
解决方案
1. 检查Collections配置是否正确
报错核心是site.collections['notes']为nil,说明Jekyll未识别到notes集合:
- 打开
_config.yml,确认Collections配置格式正确,示例:collections: notes: output: true # 生成页面 permalink: /notes/:path/ # 自定义链接格式 - 确保项目根目录存在
_notes文件夹(Jekyll集合默认对应下划线开头的同名文件夹),如果文件夹名不对,Jekyll无法加载集合。
2. 修复插件中的空值判断
打开_plugins/empty_front_matter_note_injector.rb,在访问relative_directory前先判断集合是否存在,避免空值报错:
# 替换原第11行及后续循环代码 if site.collections['notes'] Dir.glob(site.collections['notes'].relative_directory + '/**/*.md').each do |filename| # 保留原有的循环逻辑 end end
或者使用Ruby安全导航操作符(Ruby 2.3+支持)简化:
Dir.glob(site.collections['notes']&.relative_directory + '/**/*.md').each do |filename| # 保留原有的循环逻辑 end
3. 统一Ruby环境,消除版本冲突
从gem env输出看,系统中存在多个Ruby版本(2.7.1、3.0.0、3.1.2),可能导致依赖加载混乱:
- 使用版本管理工具(如rbenv或rvm)统一Ruby版本,推荐使用项目指定版本:
- 在项目根目录创建
.ruby-version文件,写入3.1.2 - 重新打开终端,确保使用指定的Ruby版本
- 执行
bundle install重新安装项目依赖,避免版本不匹配
- 在项目根目录创建
内容的提问来源于stack exchange,提问作者naix
相关产品推荐
相关产品推荐

