Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何覆盖gem依赖关系?_Ruby On Rails_Ruby On Rails 3_Rubygems_Bundler_Omniauth - Fatal编程技术网

Ruby on rails 如何覆盖gem依赖关系?

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

我有两个gem依赖于hashie的冲突版本(一个需要~>1.2.0,另一个需要3.3.1):


我想保留这两个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)