bundler能不能自动解决Ruby版本依赖?

Can bundler automatically solve Ruby version dependencies?

我有一个 Ruby 项目(一本 Chef 食谱),我想支持 Ruby 的多个版本,包括老化的 Ruby 2.1。然而,我的许多依赖 gem(仅用于开发和测试)现在将 Ruby 版本要求放在 2.2 或更高版本上,使我的构建失败并出现如下错误:

$ bundle install
Resolving dependencies...
ERROR: your_gem-version requires ruby version >= 2.2.2, which is incompatible with the current version, ruby 2.1.5p273

我已经在我的 Gemfile 中添加了一个 case 语句来要求旧 Ruby 版本的特定 gem 版本,但是随着 gem 越来越多,它很快就失去了控制我们指定了这些 Ruby 版本要求。

有没有办法让捆绑器自动排除不受支持的 gem 版本并选择一个受支持的版本?

注意:我知道我可以 "solve" 使用 Gemfile.lock 文件,但我更愿意让我的 Travis 构建拉取最新的依赖项,这样我就可以发现这样的问题。这是一本 Chef 食谱,因此无论如何都会忽略该锁定文件;它仅适用于开发人员,我在我的 Gemfile 中需要的 gems 只是开发工具,而不是运行时要求。

bundler 将来可能会为我的问题提供一个长期的解决方案,但目前有一个很好的解决方案:将以下内容添加到我的 Gemfile 中:

ruby RUBY_VERSION

(需要捆绑器 >= 1.12)

现在,在解决 gem 依赖项时会考虑我当前的 Ruby 版本,并且我的 Travis 构建很满意。