我正在升级一些宝石。当我呼叫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
文件的副本才能正常工作,以防您已经删除了它!
现在可能已经晚了,但对于那些做了上述事情但仍然面临同样问题的人来说,值得一试。
我的解决方案是:
- 使用您拥有的
Gemfile.lock
文件(可能是从以前的构建中获得的(,并删除属于彼此依赖的gem之一的区块 - 运行
bundle install
- 如果以上步骤不起作用,请重复(步骤1和2(,但现在删除属于另一个gem的
Gemfile.lock
中的块 - 如果以上操作没有完全奏效,请尝试(步骤1(,但不要删除任何内容。然后通过
bundle update --source gem_name_here
更新两个gem。现在,在bundle install
之前运行应用程序,如果这不起作用,那么在运行应用程序之前尝试bundle install
对于其他正在寻找此问题答案的人,请在文本编辑器中打开您的Gemfile,并确保您不会:
A( 让同一块宝石上市两次或
B( 为一个宝石列出多个来源。
在我的案例中,自从gem被添加到rubygems.org后,Gemfile就没有更新过,所以我试图从rubygems和列出的git源中提取gem。删除git源代码解决了问题。