2015-10-21 69 views
1

这是一个更普遍的问题,我是新来的铁轨。指定用于特定宝石的宝石版本?

我试图使用需要JSON的旧版本的宝石,JSON -v 1.6.5

在我的Rails其他宝石应用程序依赖于JSON的新版本,JSON -v 1.8

我想知道是否可以指定json版本与特定的gem一起使用?

谢谢

回答

0

如果包更新不解决我就叉子,你需要使用相同的版本与其他宝石的依赖关系,然后指向我的叉子。

gem 'some_gem', git: 'https://github.com/user/My-Fork.git' 
0

您的每一个依赖也将有一个版本约束和你的项目只能使用一个版本每颗宝石的。

对于您的具体问题的答案是,您可以通过指定直接在您的gemfile中使用哪个版本来控制间接依赖项的版本。但是,此版本必须满足直接依赖的版本约束。

一个简单的例子。比方说,你的Gemfile看起来像这样:

source 'https://rubygems.org/' 

gem 'somegem', '~> 1.0' 

和你的Gemfile锁看起来是这样的(注意,一些地方不再赘述):

GEM 
    remote: https://rubygems.org/ 
    specs: 
    somegem (1.0) 
     json (~> 1.8) 
    json (1.8) 

的Gemfile.lock的指示somegem依赖于json,并且json版本必须大于或等于1.8但小于2.0(详细了解~> operator here)。

如果您想使用可以说json版本1.9,您可以修改您的gemfile或使用bundler命令来更新锁定文件中使用的版本。

E.g.

source 'https://rubygems.org/' 

gem 'somegem', '~> 1.0' 
gem 'json' , '~> 1.9' 

在特定情况下,如果你有使用版本冲突的间接依赖的两个依赖,宝石将是不相容的。但是,此示例旨在说明如果符合由直接依赖项指定的约束条件,则可以指定间接依赖项的版本。

Rails使用Bundler来管理Ruby依赖项。 gemfile的概述将是一个开始学习如何管理项目依赖性的好地方。