Как добавить Mac-специфические драгоценные камни для комплектации на Mac, но не в Linux?

Я разрабатываю приложение Rails на Mac, и я новичок в тестировании, поэтому я просто добавил эти драгоценные камни в свой Gemfile :

group :test, :development do
  gem 'rspec-rails'     
  gem 'rb-fsevent'
  gem 'growl'
end

Но мой сервер работает под управлением Linux, поэтому даже: производство, в котором они не сгруппированы extconf.rb:19:in '<main>': Only Darwin (Mac OS X) systems are supported (RuntimeError), bundler ( v1.0.21 ) все еще пытается их установить. ... и, конечно же, не получается!
RAILS_ENV

Настройка bundle installна работу перед запуском bundle install --without development test не работает .

Он работал при запуске , но как эти камни могут быть учтены приложением только на основе вашей ОС?group :test, :development do gem 'rspec-rails' platforms :darwin do gem 'rb-fsevent' gem 'growl' end end


Редактировать. В wiki-подключателе содержится подробная информация о том, как использовать платформу в качестве параметра .
Это же решение дано в выпуске # 663 , поэтому я попытался:

bundle install

bundle install --without darwinне работает, но даже если мы вернемся к квадрату и сделаем , результат
'darwin' is not a valid platform.
The available options are: [:ruby, :ruby_18, :ruby_19, :mri, :mri_18, :mri_19, :rbx, :jruby, :mswin, :mingw, :mingw_18, :mingw_19]
case RUBY_PLATFORM when /darwin/ gem 'foo' when /win32/ gem 'bar' end


Любые другие (изящные) подходы?

ruby-on-rails,ruby,rubygems,bundler,

26

Ответов: 5


Редактировать. В wiki-подключателе содержится подробная информация о том, как использовать платформу в качестве параметра .
Это же решение дано в выпуске # 663 , поэтому я попытался:

bundle install

bundle install --without darwinне работает, но даже если мы вернемся к квадрату и сделаем , результат
'darwin' is not a valid platform.
The available options are: [:ruby, :ruby_18, :ruby_19, :mri, :mri_18, :mri_19, :rbx, :jruby, :mswin, :mingw, :mingw_18, :mingw_19]
case RUBY_PLATFORM when /darwin/ gem 'foo' when /win32/ gem 'bar' end


Любые другие (изящные) подходы?

526
15 принят

Gemfile - это обычный рубиновый файл, поэтому вы можете использовать что-то вроде

require => false

23

В вики Wiki Bundler есть метод, который добавляет все драгоценные камни в Gemfile.lock независимо от платформы. Он устанавливается в зависимости от системы, поэтому вам не нужно реально запускать драгоценные камни:gem 'rb-inotify', :require => RUBY_PLATFORM.include?('linux') && 'rb-inotify'

def os_is(re)
  RbConfig::CONFIG['host_os'] =~ re
end

gem 'rb-fsevent', "~> 0.9.3", platforms: :ruby, install_if: os_is(/darwin/)
gem 'rb-inotify', "~> 0.8.8", platforms: :ruby, install_if: os_is(/linux/)
gem 'wdm',        "~> 0.1.0", platforms: [:mswin, :mingw. :x64_mingw], install_if: os_is(/mingw|mswin/i)

И они предоставляют вспомогательные методы, чтобы сделать это чистым:

:platforms

На моей системе Windows 7 x64, работающей под управлением Ubuntu 12.04 в Vagrant VM, это работало нормально, но этот параметр требовался - набор поставщика Linux задохнулся от жемчужины win32console:Console.c:1:21: fatal error: windows.h: No such file or directory

rspec-core


Вы можете использовать метод, который принимает произвольную лямбду.install_if -> { RUBY_PLATFORM =~ /darwin/ } do gem "pasteboard" end

Следующий пример приводится непосредственно из man-страниц Gemfile:

if

Это намного лучше, чем конструкции потока управления (например if), поскольку он правильно поддерживает зависимости и сохраняет равномерность Gemfile.lock на всех машинах.


1

Согласно документам Bundler , вам необходимо использовать platformsдирективу:

#Gemfile
platforms :mswin do
  gem "x"
end

gem "weakling",   :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri",   :platforms => [:mri_18, :jruby]

Существует несколько платформ Gemfile:

ruby C Ruby (MRI) или Rubinius, но не Windows

ruby_18 ruby И версия 1.8

ruby_19 ruby И версия 1.9

ruby_20 ruby И версия 2.0

mri То же, что и рубин, но не Рубиний

mri_18 mri И версия 1.8

mri_19 mri И версия 1.9

mri_20 mri И версия 2.0 rbx То же, что и рубин, но только Rubinius (не МРТ

jruby JRuby

mswin Windows

mingw Windows 'mingw32' платформа (aka RubyInstaller)

mingw_18 mingw AND версия 1.8

mingw_19 mingw И версия 1.9 mingw_20 mingw И версия 2.0

рубин-на-рельсы, рубин, RubyGems, пакетирование,
Похожие вопросы