指定要与特定gem一起使用的gem版本?

时间:2015-10-21 16:25:58

标签: ruby-on-rails ruby

这是一个更普遍的问题,我是铁杆新手。

我尝试使用需要较旧版本json的gem,json -v 1.6.5

我的rails应用程序中的其他gem取决于更新版本的json,json -v 1.8

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

谢谢

3 个答案:

答案 0 :(得分:1)

不可能同时使用2个版本的宝石。

Use 2 versions of gem at same time

答案 1 :(得分:0)

如果bundle update没有解决依赖关系,我会分配你需要使用与另一个版本相同的版本的gem,然后指向我的fork。

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

答案 2 :(得分:0)

每个依赖项都有一个版本约束,而您的项目只能使用每个gem的一个版本。

您的具体问题的答案是,您可以通过指定直接在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依赖jsonjson版本必须大于或等于1.8但小于2.0 (阅读有关~> operator here的更多信息)。

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

E.g。

source 'https://rubygems.org/'

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

在您的特定情况下,如果您有两个依赖项使用间接依赖项的冲突版本,那么gem将是不兼容的。但是,此示例旨在表明您可以指定间接依赖项的版本,如果它满足直接依赖项指定的约束。

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