CircleCI 说在你的 Gemfile 中列出的任何来源中都找不到你的包

CircleCI says Your bundle could not be found in any of the sources listed in your Gemfile

CircleCI 安装依赖错误:

Your bundle is locked to my_cool_gem (0.7.2), but that version could not be
found in any of the sources listed in your Gemfile. If you haven't changed
sources, that means the author of my_cool_gem (0.7.2) has removed it. You'll
need to update your bundle to a version other than my_cool_gem (0.7.2) that
hasn't been removed in order to install.

CircleCI 输出截图:

CircleCI找不到我发布到GitHub包的gem,但我在本地开发没有这样的问题。

根据 GitHub 的文档,我有符合条件的 RubyGems 和 Bundler 版本 - https://docs.github.com/en/free-pro-team@latest/packages/guides/configuring-rubygems-for-use-with-github-packages - 我相信我已按照说明发布和使用已发布的 gem s... 并且,再次使用在 local 中有效,但在 CircleCI...[= 中失败17=]

RubyGems 版本:

-bash> gem --version
3.0.9

捆绑器版本:

-bash> bundle --version
Bundler version 1.17.3

Gemfile:

source 'https://rubygems.org'                                                   
source 'https://rubygems.pkg.github.com/my_cool_org'

gem 'my_cool_gem', '0.7.2'

注意我也试过了:

source 'https://rubygems.org'                                                   
source 'https://rubygems.pkg.github.com/my_cool_org'

source 'https://rubygems.pkg.github.com/my_cool_org' do
  gem 'my_cool_gem', '0.7.2'
end

尝试 运行 bundle update my_cool_gem 如果它修改 Gemfile.lock 应该修复它。

您是否已确认它实际上仍然可以从源头获得?我知道你说它在本地工作,但这可能是因为 gem 的本地缓存版本。 Bundle 不会尝试安装已经存在的东西。

您可以通过在本地卸载并再次 运行 捆绑安装来验证这一点。

确保您已正确设置环境变量以使用 rubygems.pkg.github.com 进行身份验证。

(虽然可能设置了变量,但值可能不正确 - 我就是这种情况。)

有趣,听起来像是图像错误。如果您尝试列出 gem 的所有可用版本,会发生什么情况? gem search ^gem_name$ --all?

你试过提前强制更新吗? sudo gem update --system

对我来说,问题是访问令牌在本地机器上和 CI 上是不同的。 CI 上的密钥有效,但它没有包含请求的特定存储库的权限 gem.

尽管 Github 为每个组织提供单个注册表,但 gem 与公司的存储库相关联。注册表中的包将可见或不可见,具体取决于访问令牌对这些存储库的权限。例如,用户可以访问组织的某些存储库而不能访问其他存储库 - 如果使用该用户的个人访问令牌,则只有与允许的存储库关联的 gem 将可见。其他的会被隐藏,所以报错“找不到那个版本”。

我又运行进入这个,这次用, and no other solution worked either, so instead I chose to temporarily work around the issue by placing a copy of the gem in question directly into my app (a process known as "vendoring"; see this, this, and this解决不了):

gem unpack my_cool_gem # note, I actually had to specify the version with -v 0.12.1

mkdir vendor/gems/

mv my_cool_gem-0.12.1 vendor/gems/

Gemfile中,使用the :path option而不是:source

gem 'my_cool_gem', '0.12.1', path: 'vendor/gems'

然后生成Gemfile.lock:

bundle install