【问题标题】:Lock gem dependency versions for different rubies为不同的 rubies 锁定 gem 依赖版本
【发布时间】:2013-10-29 07:34:33
【问题描述】:

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 中设置正确的版本约束。

哪种方式更可取?

【问题讨论】:

    标签: ruby rubygems dependency-management


    【解决方案1】:

    我相信这正是 bundler 和 requires gems 工作的本质。这是 rvm 等工具的一大优势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2017-08-06
      • 1970-01-01
      • 2017-09-20
      • 2020-10-13
      • 2015-10-18
      相关资源
      最近更新 更多