【问题标题】:Gemfile Twitter + FaradayGemfile Twitter + 法拉第
【发布时间】:2014-03-14 19:39:01
【问题描述】:

在我的 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" 的兼容版本:在 宝石文件:

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

  faraday (0.8.9)

【问题讨论】:

  • 它依赖于 Development Dependencies bundler ~> 1.0
  • 抱歉,您是什么意思?它是什么?我需要编辑什么?
  • 如果没有定义 faraday gem 的版本,它将安装最新的版本,并且依赖于 bundler 1.0 gem,所以检查你的 bundler gem 版本。

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


【解决方案1】:

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 并排运行。

但是,有几件事可能会阻止这种情况发生,并且会导致您看到的错误:

  1. 没有 A v1,所以根本无法进行匹配。你被困在这种情况下,这些宝石根本无法协同工作。
  2. 您已经安装了 A v2,稍后您将添加 C。这意味着 Bundler 需要降级 A,但仅在运行 bundle install 时不会进行降级/升级。您必须明确说明它需要通过运行 bundle update A 或为您的 gemfile 中的所有 gem 重新计算依赖项:bundle update
  3. 其中一个 gem 来自 git 存储库。 Git 存储库并没有像 ruby​​gems.org 上托管的 gem 这样的版本。这意味着 Bundler 只会获取最新版本,而不能降级该 gem。在这种情况下,您需要手动指定分支或修订版。

我的猜测是您正在查看方案 2。您已经安装(并锁定)了 faraday 的 0.8.9 版本。通过添加 twitter,您之前的锁需要更新。

但是要小心运行bundle update 而不带参数。它将尝试获取 gemfile 中每个 gem 的最新版本,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多