TL;DR:尝试运行bundle update
.
Bundler 尝试以所有依赖项也匹配的方式查找匹配的 gem。所以考虑一下:
- gem A v1 依赖于 B v1
- gem A v2 依赖于 B v2
- gem C v1 依赖于 B v1
- 没有知道如何处理 B v2 的 C 版本。
在这种情况下,Bundler 会选择(甚至降级)A 到 v1,这样就可以让 A 和 C 并排运行。
但是,有几件事可能会阻止这种情况发生,这将导致您看到的错误:
- 没有 A v1,所以根本无法匹配。你被困在这种情况下,这些宝石根本不会一起工作。
- 您已经安装了 A v2,稍后您将添加 C。这意味着 Bundler 需要降级 A,但仅在运行
bundle install
. 您必须特别说明它需要通过运行bundle update A
或为您的 gemfile 中的所有 gem 重新计算依赖项:bundle update
.
- 其中一个宝石来自 git 存储库。Git 存储库并没有像 rubygems.org 上托管的 gem 这样的版本。这意味着 Bundler 只会获取最新版本,而不能降级该 gem。在这种情况下,您需要手动指定分支或修订。
我的猜测是您正在查看方案 2。您已经安装(并锁定)了法拉第 0.8.9 版。通过添加 twitter,您之前的锁需要更新。
但是,请注意不要在bundle update
没有参数的情况下运行。它将尝试获取 gemfile 中每个 gem 的最新版本,这可能不是您想要的。