使用捆绑器和不同平台的 gem 要求

问题描述 投票:0回答:2

根据手册,我似乎在努力解决我认为的捆绑器的标准功能 使用

:platforms
选项或
platforms

指定某些平台需要的宝石的能力

我想根据所使用的 ruby 版本指定不同版本的 gem

source "http://rubygems.org"
gem "trollop", "~> 1.16.2"
gem "chronic", "~> 0.6.4"
gem "highline", "~> 1.6.2"
gem "colorize", "~> 0.5.8"
gem "queryparams", "~> 0.0.3"

platforms :ruby_18 do
  gem "json"
  gem "activesupport", "~>2.8.9"
end

platforms :ruby_19 do
  gem "activesupport", "~>3.1.3"
end

但是运行时失败

bundle install

You cannot specify the same gem twice with different version requirements.
You specified: activesupport (~> 2.8.9) and activesupport (~> 3.1.3)
ruby bundler
2个回答
3
投票

您不需要 2 个不同的 Gemfile 来实现特定于平台的 gem 要求。 只需检查

RUBY_VERSION
并将您的宝石放入某种条件子句中:

if(defined?(JRUBY_VERSION))
  gem 'warbler'
else
  case(RUBY_VERSION)
  when('1.8.7')
    gem 'ruby-debug'
  when('1.9.2')
    gem 'ruby-debug19'
  when('1.9.3')
    gem 'debugger'
  end
end

这应该可以解决问题。


2
投票

我很确定这是不可能的。一个 gemfile 不能使用不同版本指定相同的 gem。不仅在不同的平台中,甚至不在不同的组中(group_ruby_18,group_ruby_19),然后尝试 捆绑安装——不带 group_ruby_18

所以这也会失败。

我以前遇到过这个问题,我找到的唯一解决方案是有 2 个不同的 GEMFILES。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.