Ruby on rails 如何覆盖gem依赖关系?
我有两个gem依赖于hashie的冲突版本(一个需要~>1.2.0,另一个需要3.3.1):Ruby on rails 如何覆盖gem依赖关系?,ruby-on-rails,ruby-on-rails-3,rubygems,bundler,omniauth,Ruby On Rails,Ruby On Rails 3,Rubygems,Bundler,Omniauth,我有两个gem依赖于hashie的冲突版本(一个需要~>1.2.0,另一个需要3.3.1): 我想保留这两个gems并使用更高版本的hashie。有没有一种方法可以覆盖其中一个gem依赖项?标准建议是使用更高版本的兼容版 我是这样做的,但我认为bundler有一个已定义的命令 首先删除gem文件中的gem'omniauth'行。运行bundle install,然后必须再次将带有gem'omniauth'的行添加到gem文件中,再次运行bundle install 如果您查看Gemfile.lo
我想保留这两个gems并使用更高版本的hashie。有没有一种方法可以覆盖其中一个gem依赖项?标准建议是使用更高版本的兼容版 我是这样做的,但我认为bundler有一个已定义的命令 首先删除gem文件中的
gem'omniauth'
行。运行bundle install
,然后必须再次将带有gem'omniauth'
的行添加到gem文件中,再次运行bundle install
如果您查看Gemfile.lock,此安装hashie2.0.5
,更高的兼容版本
编辑:为什么这样做
首先我用hashie检查依赖关系:
hashie<4,>=1.2
,然后用hashie<2.1,>=1.2.0检查依赖关系。此时,我知道任何介于1.2和2.0.x之间的hashie版本都必须工作。然后,我们必须删除Gemfile.lock中的约束,继续使用hassie 3.3.1,从Gemfile中删除“omniauth”,这样就完成了。之后,当安装restforce时,bundler会发现新版本与restforce“2.0.5”兼容。当您再次添加omniauth bundler时,不会更新已完成的依赖项。我认为bundle update
实际上就是您所追求的。这将整理依赖项并在需要时安装不同版本的gems,为您提供最新的gems
但是要小心,因为更新gems可能会带来兼容性问题。Bundler将明确不允许这样做,这是有充分理由的。是否有新版本的
restforce
可以很好地使用hashie
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)