为不同的 Ruby 版本锁定 gem 依赖版本

4

Rubygems没有提供一种适当的方式来为不同的Ruby版本指定不同的依赖关系。如果我们在gemspec中加入一个条件语句,就可以切换安装什么:

if RUBY_VERSION < "1.9"
  # ruby 1.8 only supports nokogiri < 1.6
  s.runtime_dependency "nokogiri", ">= 1.4.0", "< 1.6"
else
  s.runtime_dependency "nokogiri", ">= 1.4.0"
end

但是,这并不能控制什么会被加载。如果在加载路径中有一个更新的版本,即使与 ruby 1.8 不兼容,它也会被加载。

我不确定这实际上是否是个问题:如果你使用 rbenv/rvm 等,那么每个 ruby 都有不同的 gem 路径,所以希望你永远不会在同一个地方安装两个版本。我认为即使标准 gem 路径也分为兼容版本 (1.8 / 1.9.1)。这是用来解决这个问题的吗? 或者你能否陷入同时安装两个版本的情况?

另一种方法是保持 gemspec 开放式(没有条件要求),并警告用户在他们的 Gemfile 中设置正确的版本约束条件。

哪种方式更可取?

1个回答

0

我相信这只是bundler和需要gems的工作方式的本质。这是像rvm这样的工具的伟大优势之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接