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
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 将可见。其他的会被隐藏,所以报错“找不到那个版本”。
我又运行进入这个,这次用
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