Bundler可以根据我的ruby版本自动安装最新版本(或受其他依赖项限制)吗?

时间:2017-01-24 22:33:05

标签: ruby rubygems bundler

我经常遇到Gemfile指定获取gem的最新版本的问题,但考虑到我的系统的限制,我只是得到一个错误,因为最新版本与ruby不兼容。

例如,假设我有:

gem "my-gem", ">=1.2"

最新版本是1.5,但只有1.4版本适用于我的Ruby版本。安装1.4会更有意义,而不是产生错误,因为它符合我的要求并且可以使用我的工作。 (即Bundler应安装“所有依赖项满足的最新版本”,并在此版本低于Gemfile中指定的时间时产生错误)

实际上,Bundler的默认行为有效地强加了“> = 1.5”,即使这不是Gemfile所需要的。

有没有办法,除了手动更改Gemfile之外,捆绑器可以表现得很明智,只是尝试提供它有要求的宝石的最新版本?

更新

我同意使用~> x.x.x是明智之举,但它并不像我所要求的那样做。 ~> x.x.x具体说“只安装此版本加补丁;不要转到x.x + 1”。但这与“给我最新版本,我可以满足”

的依赖关系不一样

2 个答案:

答案 0 :(得分:2)

从版本1.13开始,bundler确实尊重所需的ruby版本的gem。

为了让bundler解析正确的版本,您必须在Gemfile本身中指定所需的ruby版本。这是必需的,因为指定的ruby版本会影响Gemfile.lock中已解析的gems,它本身独立于正在运行的Ruby。

您可以在Gemfile

中定义所需的ruby版本
ruby "~> 2.1.0"

有关指定ruby版本的详细信息和其他选项,请参阅bundler's documentation。该功能已在changelog for bundler 1.13中公布。

答案 1 :(得分:1)

gem "my-gem", "~>1.4.0"

gem "my-gem", '>= 1.4', '< 1.5'

应该这样做。

来自documentation

  

说明符〜&gt;具有特殊意义,通过实例最佳显示。 〜&GT;   2.0.3与&gt; = 2.0.3相同且&lt; 2.1

article

  

gem('nokogiri','&gt; = 1.0.0','&lt; 2.0.0')

     

这意味着您将从1.0.0开始使用任何版本的Nokogiri   但不是2.0.0或更高。