Бундлер неправильно пытается установить «разработку» и «тестовые» групповые драгоценные камни в производстве
-
09-10-2019 - |
Вопрос
У меня есть небольшое веб -приложение, которое использует кучу драгоценных камней. Некоторые из них используются только для 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
Бандлер должен обнаружить правильную среду и игнорировать другие драгоценные камни, верно? Прямо сейчас я удаляю все строки, которые не находятся в группе по умолчанию на сервере, чтобы заставить это работать, но это ужасный взлом.
Решение
После большого количества копаний я нашел решение для этой проблемы. Все, что мне нужно было сделать, это бежать bundle install --without development test
Перед запуском сервера. Это добавляет .bundle/config
файл в корне Rails с линией BUNDLE_WITHOUT: test:development
Анкет Теперь, когда вы бежите bundle install
Или запустите сервер, он проигнорирует эти группы.
CLI Bundler позволяет указать список групп, установка пакета драгоценных камней, не должна устанавливаться с опцией -без. Чтобы указать несколько групп для игнорирования, укажите список групп, разделенных пространствами.
Установка пакета -без тестового пакета. В следующий раз, когда вы запустите установку пакета, без каких -либо опций, Bundler вспомнит его.
Кроме того, вызов Bundler.Setup без параметров или вызова требуется «Bundler/Setup», установит все группы, за исключением тех, которые вы исключили через -без (так как они, очевидно, недоступны).
Другие советы
В моем случае он устанавливал драгоценные камни от 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]
Вы не определили производственную группу =)