You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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版本,推荐使用项目指定版本:
    1. 在项目根目录创建.ruby-version文件,写入3.1.2
    2. 重新打开终端,确保使用指定的Ruby版本
    3. 执行bundle install重新安装项目依赖,避免版本不匹配

内容的提问来源于stack exchange,提问作者naix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:24:32