Может ли упаковщик ограничить установку драгоценного камня определенной операционной системой?

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


person Jonathan C.    schedule 19.08.2011    source источник


Ответы (2)


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

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

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

person John Beynon    schedule 19.08.2011
comment
Это по-прежнему устанавливает драгоценный камень, не так ли? Я ищу способ пропустить его во время bundle install, если это не Linux. - person Jonathan C.; 19.08.2011
comment
@rubish Да, он все еще устанавливает его. :require => false используется только для того, чтобы упаковщик не требовал библиотеки во время выполнения, т. Е. Вы требуете ее вручную в своем собственном коде. - person Jonathan C.; 19.08.2011
comment
@Jonathan C. Не :require => false, а if RUBY_PLATFORM =~ /darwin/i должен был добиться цели. Стоит отметить проблему, указанную @Luke Cowell, с Gemfile.lock - person rubish; 19.08.2011

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

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

begin
  require 'os-x-gem'
rescue LoadError
end
begin
  require 'linux-gem'
rescue LoadError
end
person Luke Cowell    schedule 19.08.2011
comment
Но это не удастся, если пользователь работает в Linux, так как require "os-x-gem" завершится ошибкой, что приведет к ошибке загрузки, и linux gem никогда не потребуется. Оба драгоценных камня нуждаются в своих собственных спасательных блоках. - person rubish; 19.08.2011
comment
отличный момент, я пропустил это. Я обновил пример, чтобы исправить это. - person Luke Cowell; 19.08.2011