Github Actions中bundle exec rubocop执行失败但本地运行正常如何解决
问题根因
- 你的项目根目录下的
.rubocop.yml配置中继承了rubocop-discourse提供的规则,该gem未被CI环境安装 - CI环境中设置了
RAILS_ENV: test,Bundler默认会跳过development组的依赖安装,而你本地通常默认安装所有组的依赖,且rubocop系列gem一般都放在development组中,所以本地运行正常,CI报错
解决方案
方案1:修改CI配置,安装所有Bundler组依赖
修改ruby/setup-ruby步骤的参数,明确不排除任何组的依赖,修改后的工作流对应部分如下:
- uses: ruby/setup-ruby@v1 with: bundler-cache: true bundler_without: "" # 清空排除的组,安装所有Gemfile中声明的依赖
方案2:调整Gemfile的gem分组
如果不想在CI中安装development组的其他无关依赖,可以将rubocop、rubocop-discourse等代码检查相关的gem从development组移动到test组,修改后重新提交Gemfile和Gemfile.lock即可。
方案3:单独在CI执行rubocop前安装依赖
也可以在RuboCop步骤前增加一行手动安装对应gem的命令:
- name: Install rubocop extensions run: gem install rubocop-discourse - name: RuboCop run: bundle exec rubocop
额外排查项
- 确认你已经将
Gemfile.lock提交到代码仓库,ruby/setup-ruby的依赖缓存逻辑基于该文件,缺失会导致CI安装的依赖版本和本地不一致 - 确认你的
.rubocop.yml中没有引用其他未在Gemfile中声明的rubocop扩展gem
内容的提问来源于stack exchange,提问作者A. KUMAR
相关产品推荐
相关产品推荐

