捆绑器:根据平台指定 ruby 版本

bundler: specify ruby version based on platform

我们正在为我们编写的微服务在 MRI 和 JRuby 上进行一些 A/B 测试。

我需要我的服务器或任何本地开发人员使用指定版本的 JRuby 或 MRI。

我通读了 Bundler's docs 并认为我理解了 ruby 引擎的用法,可以这样使用:

platforms :jruby do
  ruby '1.9.3', engine: :jruby, engine_version: '1.7.19'
  gem 'bson'
end

platforms :ruby do
  ruby '2.2.0', engine: :ruby, engine_version: '2.2.0'
  gem 'bson_ext'
end

但是如果我这样做 $which ruby 我得到:.rvm/rubies/jruby-1.7.19/bin/ruby 然后 运行 bundle install 我得到:

Your Ruby engine is jruby, but your Gemfile specified ruby

如何将捆绑器与平台一起使用以指定特定于 user/server 平台的 ruby 版本 运行ning?

从当前 Bundler 开始,您不能这样做,因为 :platforms 仅适用于 gem 声明...您可以获得的最接近的是 "runtime" 决定Ruby 加载 Gemfile 所基于的逻辑:

if defined? JRUBY_VERSION
  ruby '1.9.3', engine: :jruby, engine_version: '1.7.19'
else
  ruby '2.2.0', engine: :ruby, engine_version: '2.2.0'
end

platforms :jruby do
  gem 'bson'
end

platforms :ruby do
  gem 'bson_ext'
end