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

GitHub Actions无法找到rubocop与httparty gem的原因排查

问题原因与解决方案

核心原因

当你在GitHub Actions中使用ruby/setup-ruby的bundler-cache: true参数时,Bundler会把所有依赖gem安装到独立的bundle专属目录,而非Ruby的全局gem路径。GitHub Actions的默认Shell环境不会自动将这个bundle目录加入Ruby的gem搜索路径,因此出现两个问题:

  • 直接运行./script.rb时,Ruby找不到通过Bundler安装的httparty
  • 直接运行rubocop时,系统找不到Bundler安装的rubocop可执行文件(它不在全局PATH中)

本地环境能正常运行,是因为你的本地Shell可能已配置自动加载Bundler环境(比如rbenv、rvm的钩子,或手动设置了环境变量),或是你把gems安装到了全局路径。

解决方案

1. 用bundle exec包裹命令

在GitHub Actions的步骤中,所有依赖Bundler管理的gem的命令,都需要用bundle exec来运行:
修改GitHub Actions的YAML配置中的脚本运行步骤:

- name: Script
  run: bundle exec ./script.rb

运行rubocop时同样需要:

bundle exec rubocop

bundle exec会临时将Bundler管理的gem路径和可执行文件路径加入当前环境,确保命令能找到对应的依赖。

2. 在脚本中添加Bundler环境加载

如果希望直接运行脚本也能生效,可以在script.rb的最开头添加require 'bundler/setup',让脚本自动加载Bundler的环境配置:

#!/usr/bin/env ruby
require 'bundler/setup' # 添加这一行
require_relative 'lib/calls'

service = Service.new
response = service.get
puts response

修改后,只要脚本在有Gemfile和Gemfile.lock的目录下运行,就能自动加载Bundler管理的gem。

补充说明

确保项目根目录存在Gemfile和Gemfile.lock文件,且文件中包含httparty和rubocop的依赖声明,否则bundler-cache: true无法正确安装这些gem。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:48:16