CircleCI 说在您的 Gemfile 中列出的任何源中都找不到您的包
Posted
技术标签:
【中文标题】CircleCI 说在您的 Gemfile 中列出的任何源中都找不到您的包【英文标题】:CircleCI says Your bundle could not be found in any of the sources listed in your Gemfile 【发布时间】:2021-04-03 04:46:32 【问题描述】: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 Packages 的 gem,但我在本地开发中没有这样的问题。
我有 RubyGems 和 Bundler 的合格版本,根据 GitHub 的文档 - https://docs.github.com/en/free-pro-team@latest/packages/guides/configuring-rubygems-for-use-with-github-packages - 我相信我已按照说明发布和使用所述已发布的 gem...再次,使用工作 本地但在 CircleCI...
中失败RubyGems 版本:
-bash> gem --version
3.0.9
捆绑器版本:
-bash> bundle --version
Bundler version 1.17.3
宝石文件:
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
【问题讨论】:
我真的只是想要一个答案(来自任何人)——我不关心“有信誉的来源”——我想下次我会选择“提请注意这个问题”。对不起! 【参考方案1】:尝试运行bundle update my_cool_gem
,如果它修改了应该修复它的Gemfile.lock
。
【讨论】:
感谢您对我的帮助。不幸的是bundle update
没有效果(没有文件被更改)。我怀疑这个结果,因为我已经运行了bundle install
并提交了对Gemfile
和Gemfile.lock
的更改(因为我将gem 从0.7.1
更新为0.7.2
以尝试调试情况。我不知所措更多的东西可以尝试。再次感谢。
在本地它什么都不做(锁文件没有变化)。在 CI 上,它显示错误:Unable to find a spec satisfying my_cool_gem (~> 2.0) in the set. Perhaps the lockfile is corrupted?
【参考方案2】:
您是否验证过它实际上仍然可以从源头获取?我知道您说它可以在本地工作,但这可能是因为 gem 的本地缓存版本。 Bundle 不会尝试安装已经存在的东西。
您可以通过在本地卸载它并再次运行 bundle install 来验证这一点。
【讨论】:
感谢您帮助我。是的,我已验证 gem 在源头可用。它列在https://github.com/orgs/my_cool_org/packages
中(我将 URL 格式化为代码,因为我不希望它变成链接,因为我使用的是 my_cool_gem
存根)。【参考方案3】:
确保您已正确设置环境变量以使用rubygems.pkg.github.com
进行身份验证。
(虽然可以设置变量,但值可能不正确 - 就像我的情况一样。)
【讨论】:
在这种情况下我收到Bad username or password for …
错误。
如果未设置密码(删除~/.bundle/config
),则错误为Authentication is required for rubygems.pkg.github.com
。所以这不太可能是原因。
该密钥很可能是有效,但它没有对该存储库的权限。尽管每个组织只有一个注册表 URL,但 Github 将每个存储库中的 gem 分开。【参考方案4】:
有趣,听起来像一个图像错误。如果您尝试列出所有可用版本的 gem,会发生什么? gem search ^gem_name$ --all
?
您是否尝试过提前强制更新? sudo gem update --system
【讨论】:
谢谢,但我碰巧已经弄清楚了——根据我上面的回答......虽然变量已设置,但它是无效的(我相信是因为创建身份验证令牌的用户有已从组织中删除)。 对我来说,gem search
和 --all
只搜索 rubygems.org,所以在本地(bundle install
工作的地方)和 CI(不工作的地方)都没有那个 gem。 sudo gem update --system
没有帮助。【参考方案5】:
对我来说,问题在于本地机器和 CI 上的访问令牌不同。并且 CI 上的密钥是有效的,但它对包含请求的 gem 的特定存储库没有权限。
尽管 Github 为每个组织提供单一注册表,但 gem 与公司的存储库相关联。并且注册表中的包将是可见或不可见的,具体取决于访问令牌所具有的这些存储库的权限。例如,用户可以访问组织的某些存储库,而不必访问其他存储库——如果使用该用户的个人访问令牌,则只有与允许的存储库关联的 gem 可见。其他的会被隐藏,所以错误是“找不到那个版本”。
【讨论】:
【参考方案6】:我又遇到了这个问题,这次我无法用the solution I used last time 解决它,也没有其他解决方案有效,所以我选择通过放置一个副本来临时解决这个问题将有问题的 gem 直接导入我的应用程序(称为“供应商”的过程;请参阅 this、this 和 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 说在您的 Gemfile 中列出的任何源中都找不到您的包的主要内容,如果未能解决你的问题,请参考以下文章
在您的 Gemfile 中列出的或本机上可用的任何 gem 源中找不到 gem 'wdm (>= 0.1.0) x64-mingw32'
您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0