Бандлер некорректно пытается установить в производство гемы «разработка» и «тестирование» - PullRequest
23 голосов
/ 14 декабря 2010

У меня есть небольшое веб-приложение, которое использует кучу драгоценных камней. Некоторые из них используются только для сред test и development. Теперь, когда я пытаюсь запустить единорога на рабочем сервере с помощью следующей команды, происходит сбой.

unicorn_rails -E production -D -c config/unicorn.rb

Я вижу ошибку в файлах журнала:

Refreshing Gem list
Could not find gem 'spork (>= 0.9.0.rc2, runtime)' in any of the gem sources listed in your Gemfile.
Try running `bundle install`.

Я вставил свой гемфайл ниже:

source 'http://rubygems.org'

gem 'rails', '3.0.1'
gem 'unicorn'
gem 'mongoid', '>= 2.0.0.beta.19'
gem 'devise'
gem 'cancan'
gem 'haml', '>= 3.0.0'
gem 'bson'
gem 'bson_ext'
gem 'formtastic'
gem 'bluecloth'

group :production do
  gem 'capistrano'
end

group :development do
  gem 'haml-rails'
  gem 'hpricot', '0.8.2'
  gem 'ruby_parser', '2.0.5'
  gem 'less'
  gem 'rspec-rails', '>= 2.0.1'
end

group :development,:test do
  gem 'spork', '>=0.9.0.rc2'
  gem 'mongoid-rspec'
end

group :test do
  gem 'factory_girl_rails'
  gem 'autotest'
  gem 'cucumber-rails'
  gem 'cucumber'
  gem 'capybara'
  gem 'shoulda'
  gem 'database_cleaner'
  gem 'test_notifier'
  gem 'rspec', '2.0.1'
  gem 'launchy' 
end

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

Ответы [ 3 ]

53 голосов
/ 15 декабря 2010

После долгих копаний я нашел решение этой проблемы. Все, что мне нужно было сделать, это запустить bundle install --without development test перед запуском сервера. Это добавляет файл .bundle/config в корень rails со строкой BUNDLE_WITHOUT: test:development. Теперь, когда вы запускаете bundle install или запускаете сервер, он игнорирует эти группы.

Из документации

Bundler CLI позволяет вам указать список групп, чьи жемчужные расслоения установить не следует устанавливать с - без опции. Чтобы указать несколько групп, которые нужно игнорировать, укажите список группы, разделенные пробелами.

комплект поставки - без тестового комплекта установить - без тестирования разработки После запуска пакета установите - без тест, бандлер запомнит что ты исключил тестовую группу в последнем монтаж. В следующий раз вы запустите пакетная установка, без - - без опция, упаковщик будет вызывать его.

Также, вызывая Bundler.setup без параметры или вызов требуют "bundler / setup" настроит все группы за исключением тех, которые вы исключили через --without (так как они явно недоступны).

4 голосов
/ 13 апреля 2012

В моем случае это была установка драгоценных камней из jenkins env. Поэтому мне пришлось установить собственную переменную bundle_without в capistrano.

Gemfile

group :test, :development, :jenkins do  
  gem 'test-unit', '1.2.3'  
  gem 'rspec-rails'
end

deploy.rb

set :bundle_without, [:development, :test, :jenkins]
0 голосов
/ 14 декабря 2010

Вы не определили производственную группу =)

...