Работа с компоновщиком и различными требованиями к гемам платформы - PullRequest
5 голосов
/ 02 декабря 2011

Кажется, я борюсь с тем, что я считал стандартной функциональностью компоновщика, согласно руководству Возможность указать, что гемы должны быть необходимы для определенных платформ с использованием опции :platforms или блока platforms

Я хочу указать другую версию гема, зависящую от используемой версии ruby ​​

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)

Ответы [ 2 ]

3 голосов
/ 12 апреля 2012

Вам не нужны 2 разных 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 голосов
/ 02 декабря 2011

Я почти уверен, что это невозможно.Gemfile не может иметь один и тот же гем, указанный в разных версиях.Не только на разных платформах, но даже не в разных группах (group_ruby_18, group_ruby_19), а затем, пытаясь установить пакет --without group_ruby_18

Так что это тоже не удастся.

У меня была эта проблема раньше иединственное решение, которое я нашел, было иметь 2 разных ПОЛУФАБРИКА.

...