Спутник неправильно пытается установить "разработку" и "тест" группы драгоценных камней в производство
У меня есть небольшое веб-приложение, в котором используется куча драгоценных камней. Некоторые из них используются только для сред 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`.
Я вставил свой gemfile ниже:
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
Бундлер должен обнаруживать правильную среду и игнорировать другие драгоценные камни, верно? Прямо сейчас я удаляю все строки, которые не входят в группу по умолчанию на сервере, чтобы заставить это работать, но это уродливое взломать.
Ответы
Ответ 1
После долгих поисков я нашел решение этой проблемы. Все, что мне нужно было сделать, это запустить bundle install --without development test
перед запуском сервера. Это добавляет файл .bundle/config
в корневой каталог rails со строкой BUNDLE_WITHOUT: test:development
. Теперь, когда вы запускаете bundle install
или запускаете сервер, они игнорируют эти группы.
Из документации
Интерфейс командной строки Bundler позволяет вам указать список групп, чьи инсталляции с гемами не должны устанавливаться с опцией --without. Чтобы указать несколько групп, которые нужно игнорировать, укажите список групп, разделенных пробелами.
Пакетная установка --without тестовая установка Пакетная установка --without тест разработки После запуска комплектной установки --without тестирование, упаковщик запомнит, что вы исключили группу тестирования в последней установке. В следующий раз, когда вы запустите установку пакета, без какой-либо опции --without, пакет запустит его.
Кроме того, при вызове Bundler.setup без параметров или при вызове require "bundler/setup" будут настроены все группы, кроме тех, которые вы исключили с помощью --without (поскольку они, очевидно, недоступны).
Ответ 2
В моем случае это была установка драгоценных камней из 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]
Ответ 3
Вы не определили производственную группу =)