В проекте rails, над которым я работаю, я вставил поддержку rspec, cucumber и autotest с этим Gemfile (частично)
gem 'rspec-rails'
gem 'cucumber-rails'
gem 'autotest-standalone'
gem 'autotest-rails-pure'
gem 'zentest-without-autotest'
однако, чтобы запустить тесты с автотестом, мне нужно выполнить bundle exec autotest
, в противном случае произойдет сбой с этим сообщением
$ autotest
loading autotest/cucumber_rails_rspec_rspec2
Error loading Autotest style autotest/cucumber_rails_rspec_rspec2 (no such file to load -- autotest/cucumber_rails_rspec_rspec2). Aborting.
Сейчас я работаю на Mac и хочу включить гем autotest-growl и autotest-fsevents, но если я добавлю эти строки в мой ~/.autotest
require 'autotest/growl'
require 'autotest/fsevent'
тогда мне нужно вставить соответствующие гемы в Gemfile, и все работает, но он ломает сборки на моем CI-сервере (который находится в Linux)
Как решить эту проблему, не поддерживая другой Gemfile для локальных сред и сред CI?
EDIT:
На данный момент я решил с этими строками в Gemfile
if RUBY_PLATFORM.downcase.include?("darwin") # I'm on Mac
gem 'autotest-fsevent'
gem 'autotest-growl'
end
Он работает как локально, так и на CI-сервере, я не знаю, если он что-то испортил, на данный момент он работает безупречно.
Любой более чистый способ сделать это по-прежнему приветствуется.
EDIT2:
Я переключился на группы решений. Хотя предыдущий monkeypatch работает довольно хорошо как в разработке, так и для непрерывной интеграции, он даст вам ошибку в работе, если вы будете использовать задачи упаковщика capistrano для развертываний или если вы используете опцию bundle install --deployment
(рекомендуется в производстве)
При использовании строки if RUBY_PLATFORM.downcase.include?("darwin")
вы получите эту ошибку при развертывании.
# bundle install --deployment --without development test
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
You have deleted from the Gemfile:
* autotest-fsevent
* autotest-growl
Таким образом, мое окончательное решение этой проблемы состоит в том, чтобы включить гемы, специфичные для платформы, в заданную группу, скажем, osx, а затем в рабочей среде и на сервере CI исключить ее с помощью комплекта.
Если вы используете Capistrano для развертывания, укажите это в config.rb
set :bundle_without, [:development, :test, :osx]
# capistrano bundler task
require "bundler/capistrano"