锁定不同rubies的gem依赖版本

时间:2013-10-29 07:34:34

标签: ruby rubygems dependency-management

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路径,所以希望你们两个都不会安装在同一个地方。我认为即使标准宝石路径也被兼容版本(1.8 / 1.9.1)划分。这是为了解决这个问题吗,或者你是否会遇到两个版本一起安装的情况?

另一种方法是让gemspec保持开放状态(没有条件),并警告用户如果需要,可以在他们的Gemfile中设置正确的版本约束。

哪种方式更可取?

1 个答案:

答案 0 :(得分:0)

我相信这只是捆绑器和要求宝石如何工作的本质。这是rvm等工具的一大好处。