您的bundle需要相互依赖的宝石,从而创建一个无限循环.请移除宝石



我正在升级一些宝石。当我呼叫bundle时,我有这个:

Your bundle requires gems that depend on each other, creating an 
infinite loop. Please remove gem 'abc' and try again.

我已删除,但此错误仍然存在。

最好的办法是删除Gemfile.lock,然后运行bundle update

为什么这会起作用?有时,您会强制加载旧版本的gem,并且需要加载该gem的新版本。

因此,删除Gemfile.lock将使捆绑包下载正确版本的gems。

如果这不起作用,您可能会强制加载gem的一个版本,比如gem "paperclip", "~> 4.2",它与另一个gem发生冲突,这不是很常见,但也可能发生。您必须找到有问题的gem,然后删除版本,如gem "paperclip",或者找到有冲突的其他gem,并获得该gem的正确版本。如果你使用git,你可以回到你的旧Gemfile.lock,看看你有什么版本的冲突宝石,并强制使用那个版本的宝石。让我们希望删除你的Gemfile.lock有效。

注意:在继续阅读之前,您需要Gemfile.lock文件的副本才能正常工作,以防您已经删除了它!

现在可能已经晚了,但对于那些做了上述事情但仍然面临同样问题的人来说,值得一试。

我的解决方案是:

  1. 使用您拥有的Gemfile.lock文件(可能是从以前的构建中获得的(,并删除属于彼此依赖的gem之一的区块
  2. 运行bundle install
  3. 如果以上步骤不起作用,请重复(步骤1和2(,但现在删除属于另一个gem的Gemfile.lock中的块
  4. 如果以上操作没有完全奏效,请尝试(步骤1(,但不要删除任何内容。然后通过bundle update --source gem_name_here更新两个gem。现在,在bundle install之前运行应用程序,如果这不起作用,那么在运行应用程序之前尝试bundle install

对于其他正在寻找此问题答案的人,请在文本编辑器中打开您的Gemfile,并确保您不会:

A( 让同一块宝石上市两次或

B( 为一个宝石列出多个来源。

在我的案例中,自从gem被添加到rubygems.org后,Gemfile就没有更新过,所以我试图从rubygems和列出的git源中提取gem。删除git源代码解决了问题。

最新更新