是否可以验证 Gemfile.lock 中的所有 gem 是否都存在于 https://rubygems.org?

Is it possible to verify if all gems in a Gemfile.lock exist at https://rubygems.org?

是否可以验证 Gemfile.lock 文件中的所有 gem 是否都存在于 https://rubygems.org

我最近更新了我的 elastic beanstalk 平台版本,但由于以下错误而失败:

Your bundle is locked to mimemagic (0.3.3), 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 mimemagic (0.3.3) has removed it. You'll need to update your bundle to a version other than mimemagic (0.3.3) that hasn't been removed in order to install.

由于托管部署系统的所有复杂性,很难调试。

失败的原因是mimemagic的作者删除了0.3.3版本,所以我需要将gem更新到0.3.6。 (在此处查看 gem 版本历史记录:https://rubygems.org/gems/mimemagic/versions

所以我的问题是:是否有一个命令可以 运行,例如bundle check_sources 扫描您 Gemfile.lock 中的 gem 和版本并点击 https://rubygems.org 以验证它们是否全部存在并且仍然可用?

它与 bundle check 的作用类似,但它不是在本地计算机上查找 gem,而是在远程源中查找它们。

我今天遇到了完全相同的问题,我是 运行 我在 docker 上的项目,解决方案是更改 Gemfile.lock 上的 mimemagic 版本,我不知道是否是一个最佳解决方案,但节省了我的时间:)

在向 bundler 的开发人员提出功能请求后:https://github.com/rubygems/rubygems/issues/4487,他们至少提出了一个可行的解决方法。只需 运行 这个命令:

bundle install --deployment --redownload

--redownload(或 --force)开关将强制下载每个 gem,即使所需的版本已经在本地可用。

--deployment 开关强制使用 Gemfile 中指定的确切版本(并忽略补丁升级,如 ~> 0.3.2 通常会升级到 0.3.6)。 --deployment 的使用是部署期间的常见做法。

此解决方案并不理想,因为它需要完全重新安装所有捆绑包的 gem。但它有效!

感谢 https://github.com/deivid-rodriguez 的建议。