0

私の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" の互換性のあるバージョンを見つけることができませんでした: Gemfile 内:

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

  faraday (0.8.9)
4

1 に答える 1

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 installbundle update Agemfile: 内のすべての gem を実行して依存関係を再計算する必要があることを具体的に言う必要がありますbundle update
  3. gem の 1 つは git リポジトリからのものです。Git リポジトリには、実際には ruby​​gems.org でホストされている gem のようなバージョンはありません。これは、Bundler が最新バージョンのみをフェッチし、その gem をダウングレードできないことを意味します。この場合、ブランチまたはリビジョンを手動で指定する必要があります。

私の推測では、シナリオ 2 を見ていると思います。ファラデーのバージョン 0.8.9 は既にインストール (およびロックダウン) されています。Twitter を追加すると、以前のロックを更新する必要があります。

bundle updateただし、引数なしで実行する場合は注意してください。gemfile 内のすべての gem の最新バージョンを取得しようとしますが、これはあなたが望むものではないかもしれません。

于 2014-02-15T11:24:09.340 に答える