如何覆盖gem依赖?

use*_*303 6 rubygems ruby-on-rails bundler omniauth ruby-on-rails-3

我有2个宝石依赖于相互冲突的hashie版本(一个需要〜> 1.2.0而另一个需要3.3.1):

Bundler could not find compatible versions for gem "hashie":
  In Gemfile:
    restforce (>= 0) ruby depends on
      hashie (~> 1.2.0) ruby

    omniauth (>= 0) ruby depends on
      hashie (3.3.1)
Run Code Online (Sandbox Code Playgroud)

我想保留两个宝石并使用更高版本的hashie.有没有办法覆盖其中一个gem依赖项?

Ale*_*bio 4

标准建议是使用兼容的更高版本。

我这样做,但我认为捆绑器有一个定义的命令。

gem 'omniauth'首先删除Gemfile 中的行。运行bundle install,然后您必须再次将行添加gem 'omniauth'到您的 Gemfile 中,再次运行捆绑安装。

如果你看一下Gemfile.lock,这个安装的hashie 2.0.5,兼容性更高。

编辑:为什么这有效?

首先,我使用 hashie:检查omniauth依赖关系,然后使用restforce :hashie < 4, >= 1.2进行相同的操作。此时,我知道 1.2 和 2.0.x 之间的任何版本的 hashie 都必须工作。然后我们必须删除 Gemfile.lock 中继续使用 hassie 3.3.1 的约束,从 Gemfile 中删除“omniauth”就完成了。之后,当安装restforce时,捆绑程序会发现与restforce“2.0.5”兼容的新版本。当您再次添加omniauth 捆绑程序时,不会更新已完成的依赖项。hashie < 2.1, >= 1.2.0