Может ли компоновщик ограничить установку гемов определенной операционной системой? - PullRequest
4 голосов
/ 19 августа 2011

Я занимаюсь разработкой Rails 3.1 и использую гем ресурсов по умолчанию для uglifier.Этот драгоценный камень зависит от execjs, который требует времени выполнения JavaScript.Я работаю на Mac OSX, поэтому у меня никогда не было проблем с этим.Другой разработчик использует Linux, который по умолчанию не имеет времени выполнения JavaScript.Таким образом, использование therubyracer, среды выполнения JavaScript, встроенной в Ruby, работает вполне нормально, но я бы хотел, чтобы Bundler установил его, только если система Linux.Могу ли я указать это в Gemfile, чтобы он устанавливался только в Linux, а не в Mac?

Ответы [ 2 ]

6 голосов
/ 19 августа 2011

вы можете сделать;

gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i

замена драгоценного камня и платформы на подходящие в вашем случае.

3 голосов
/ 19 августа 2011

Проблема с этим подходом состоит в том, что, если система OS X обновляет Gemfile.lock, драгоценный камень будет включен. Это становится проблематичным, если другой разработчик обновляет любой гем в файле gem, так как компоновщик не будет включать этот гем при вычислении зависимостей.

Мой подход к решению проблемы такого рода состоял в том, чтобы вручную установить нужный мне гем, а затем потребовать оба:

begin
  require 'os-x-gem'
rescue LoadError
end
begin
  require 'linux-gem'
rescue LoadError
end
...