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

Github Actions运行rubocop报错cannot load such file -- rubocop-rake

问题背景

在GitHub Actions工作流中配置RuboCop做自动化代码检查时,执行bundle exec rubocop命令抛出如下错误:

Run bundle exec rubocop
  bundle exec rubocop
  shell: /usr/bin/bash -e {0}
  env:
    BUNDLE_RUBYGEMS__PKG__GITHUB__COM: ***
    CI_COVERALLS_ENABLED: true
cannot load such file -- rubocop-rake
/home/runner/work/stripe-sync-service/stripe-sync-service/vendor/bundle/ruby/3.1.0/gems/rubocop-1.30.0/lib/rubocop/config_loader_resolver.rb:17:in 'require'
/home/runner/work/stripe-sync-service/stripe-sync-service/vendor/bundle/ruby/3.1.0/gems/rubocop-1.30.0/lib/rubocop/config_loader_resolver.rb:17:in 'block (2 levels) in resolve_requires'
/home/runner/work/stripe-sync-service/stripe-sync-service/vendor/bundle/ruby/3.1.0/gems/rubocop-1.30.0/lib/rubocop/config_loader_resolver.rb:13:in 'each'
/home/runner/work/stripe-sync-service/stripe-sync-service/vendor/bundle/ruby/3.1.0/gems/rubocop-1.30.0/lib/rubocop/config_loader_resolver.rb:13:in 'block in resolve_requires'
<internal:kernel>:90:in 'tap'
...
Error: Process completed with exit code 2.

已尝试在执行检查命令前运行gem install rubocop rubocop-rspec rubocop-rails rubocop-performance rubocop-rake全局安装相关gem,确认安装成功后报错仍未消除。受篇幅限制未贴出完整报错堆栈。

故障原因

bundle exec 命令的加载逻辑是仅读取当前项目Gemfile声明、安装到项目指定bundle路径下的gem包,不会加载全局gem目录下安装的包。全局安装的rubocop-rake等插件不在当前项目的bundle加载路径中,RuboCop解析配置文件里声明的require: rubocop-rake规则时找不到对应依赖文件,直接触发加载错误。

可行解决方案

按推荐优先级选择对应方案即可:

  • 方案1(最推荐,环境一致性最好):将所有RuboCop相关依赖写入项目Gemfile
    打开项目根目录下的Gemfile,将RuboCop及相关插件加入开发/测试依赖组:
    group :development, :test do
      gem 'rubocop', require: false
      gem 'rubocop-rails', require: false
      gem 'rubocop-rspec', require: false
      gem 'rubocop-performance', require: false
      gem 'rubocop-rake', require: false
    end
    
    本地执行bundle install更新Gemfile.lock后,将Gemfile、Gemfile.lock的变更提交到代码仓库。GitHub Actions执行bundle安装步骤时会自动安装所有声明的依赖,后续再执行bundle exec rubocop即可正常运行。
  • 方案2:不写入Gemfile,直接调用全局安装的RuboCop
    如果不想把RuboCop相关依赖纳入项目依赖管理,可以去掉命令前的bundle exec前缀,直接调用全局安装的rubocop可执行文件,对应CI步骤示例:
    - name: Install RuboCop dependencies
      run: gem install rubocop rubocop-rspec rubocop-rails rubocop-performance rubocop-rake
    - name: Run RuboCop check
      run: rubocop
    
    注意:该方案可能因为本地开发环境、CI环境的gem版本不一致导致检查结果存在差异,不推荐在团队协作项目中使用。
  • 方案3:修正CI中的bundle安装配置
    如果项目已经配置了bundle安装路径为vendor/bundle,需要确保CI流程中在执行rubocop前先运行bundle install安装所有Gemfile声明的依赖,不要跳过该步骤直接全局安装gem,避免出现路径不匹配的加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:21:39