Я разрабатываю Rails 3.1 и использую гем актива uglifier по умолчанию. Этот драгоценный камень зависит от execjs, для которого требуется среда выполнения JavaScript. Я разрабатываю на Mac OSX, поэтому у меня никогда не было с этим проблем. Другой разработчик использует Linux, в котором по умолчанию нет среды выполнения JavaScript. Таким образом, использование therubyracer, среды выполнения JavaScript, встроенной в Ruby, работает вполне нормально, но я бы хотел, чтобы Bundler устанавливал ее только в том случае, если используется Linux. Могу ли я указать это в Gemfile, чтобы он устанавливался только в Linux, а не в Mac?
Может ли упаковщик ограничить установку драгоценного камня определенной операционной системой?
Ответы (2)
ты можешь сделать;
gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
замена драгоценного камня и платформы на подходящие в вашем случае.
person
John Beynon
schedule
19.08.2011
Это по-прежнему устанавливает драгоценный камень, не так ли? Я ищу способ пропустить его во время
bundle install
, если это не Linux.
- person Jonathan C.; 19.08.2011
@rubish Да, он все еще устанавливает его.
:require => false
используется только для того, чтобы упаковщик не требовал библиотеки во время выполнения, т. Е. Вы требуете ее вручную в своем собственном коде.
- person Jonathan C.; 19.08.2011
@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
Но это не удастся, если пользователь работает в Linux, так как
require "os-x-gem"
завершится ошибкой, что приведет к ошибке загрузки, и linux gem никогда не потребуется. Оба драгоценных камня нуждаются в своих собственных спасательных блоках.
- person rubish; 19.08.2011
отличный момент, я пропустил это. Я обновил пример, чтобы исправить это.
- person Luke Cowell; 19.08.2011