Gemfile推特+法拉第

时间:2014-02-15 10:39:11

标签: ruby-on-rails twitter ruby-on-rails-4 bundle faraday

在我的Gemfile中

source 'https://rubygems.org'
ruby '2.1.0'
gem 'rails', '4.0.1'
gem "faraday"
gem "faraday_middleware"
gem "twitter", github: 'sferik/twitter'

如果我跑

$ bundle install

我得到了

  

Bundler找不到gem“faraday”的兼容版本:In   的Gemfile:

twitter (>= 0) ruby depends on
  faraday (~> 0.9.0) ruby

  faraday (0.8.9)

1 个答案:

答案 0 :(得分:1)

TL; DR:尝试运行bundle update

Bundler尝试找到匹配的宝石,使其所有依赖项也匹配。所以考虑一下:

  • gem A v1取决于B v1
  • gem A v2取决于B v2
  • gem C v1取决于B v1
  • 没有知道如何处理B v2的C版本。

在这种情况下,Bundler会选择(甚至降级)A到v1,这样你就可以A和C相邻。

然而,有一些事情可能会阻止这种情况发生,这将导致您看到的错误:

  1. 没有A v1,因此根本无法进行匹配。你遇到了这种情况,那些宝石根本不能合作。
  2. 您已经安装了A v2,之后又添加了C.这意味着Bundler需要降级A,但仅在运行bundle install时不会降级/升级。您必须明确说明需要通过运行bundle update A或gem文件中的所有gem来重新计算依赖项:bundle update
  3. 其中一个宝石来自git存储库。 Git存储库实际上没有像rubygems.org上托管的gems那样的版本。这意味着Bundler只会获取最新版本,并且无法降级该gem。在这种情况下,您需要手动指定分支或修订。
  4. 我的猜测是你正在看场景2.你已经安装了(并锁定了)法拉第版本0.8.9。通过添加Twitter,您需要更新以前的锁。

    但是请注意不带参数运行bundle update。它会尝试获取gemfile中每个gem的最新版本,这可能不是你想要的。