如何覆盖gem依赖?

时间:2014-10-28 23:03:50

标签: ruby-on-rails ruby-on-rails-3 rubygems bundler omniauth

我有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)

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

2 个答案:

答案 0 :(得分:1)

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

我这样做,但我认为bundler有一个已定义的命令。

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

如果您查看Gemfile.lock,请安装hashie 2.0.5,更高的兼容性。

编辑:为什么会这样?

首先,我使用hashie hashie < 4, >= 1.2检查omniauth个依赖项,然后使用restforce hashie < 2.1, >= 1.2.0进行检查。在这一点上,我知道1.2和2.0.x之间的任何版本的hashie必须工作。然后我们必须删除使用hassie 3.3.1的Gemfile.lock中的约束,从Gemfile中删除'omniauth'它已完成。之后,当安装restforce时,bundler会发现新版本与restforce'2.0.5'兼容。当你再次添加omniauth bundler时,不要更新已完成的依赖项。

答案 1 :(得分:1)

我认为bundle update实际上就是你所追求的。如果需要,可以排除依赖关系并安装不同版本的gem,为您提供最新的gem。

但要小心,因为更新宝石会引入兼容性问题。