将版本设置为最新版本,包括Gemfile中的预发布

时间:2017-07-05 13:23:38

标签: ruby rubygems version bundler

如何在Gemfile中指定版本约束,以便它始终采用最新版本,包括gem的预发行版。

目前我使用的库包含最新的稳定版本docker-compose.yml和最新的预发布2.0.0

根据我的理解,我可以将版本约束设置为2.1.0.alpha.pre.171或仅>=2.1.0.alpha.pre.171。但是,这还包括未来的预发布​​版本,例如>=2.1.0.a甚至>=2.2.0.alpha.pre.1以及未来的稳定版本,例如>=3.0.0.alpha.pre.1?这会永远解决到最新版本吗?

声明: 为了不被误解,这不适用于任何富有成效的依赖管理。我们的想法是运行一个演示程序,它应该始终包含最新的功能,如果最新的预发布版本被破坏,也会崩溃。

2 个答案:

答案 0 :(得分:2)

简而言之,这是一个非常糟糕的想法,但它很容易检查:

%w|2.1.0.alpha.pre.171
   2.1.0
   2.2.0.alpha.pre.1
   3.0.0.alpha.pre.1|.map(&Gem::Version.method(:new)).sort
#⇒ [
#   [0] #<Gem::Version "2.1.0.alpha.pre.171">,
#   [1] #<Gem::Version "2.1.0">,
#   [2] #<Gem::Version "2.2.0.alpha.pre.1">,
#   [3] #<Gem::Version "3.0.0.alpha.pre.1">
# ]

所以,是的,>=适用于任何新版本,包括2.1.0

答案 1 :(得分:1)

你想要做两件事:

  1. 在Gemfile中指定>= 2.1.0.alpha.pre.171。这里重要的是指定的约束本身就是一个预释放,这是让Bundler获取你想要预发布 1 的唯一方法。当Bundler寻找更新时,将包括所有未来版本,包括预发布版本和主要版本。

  2. 使用自动工具定期更新Gemfile.lock。 DependabotDepfuDeppbot中的任何一个都可以使用。 (披露:我写了Dependabot。)

  3. 令人惊讶的是,从Bundler 1.15.1开始,没有任何选项可以传递给复制(1)创建的行为的bundle update

    1. https://github.com/bundler/bundler/blob/v1.15.1/lib/bundler/index.rb#L194-L200