2010-12-14 9 views
22

Mam małą aplikację internetową, która wykorzystuje mnóstwo klejnotów. Niektóre z nich są używane tylko w środowiskach test i development. Teraz, gdy próbuję uruchomić jednorożca na serwerze produkcyjnym za pomocą następującego polecenia, nie działa.Niewyraźna próba instalacji "rozwojowych" i "testowych" klejnotów grupowych w produkcji

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

Błąd widzę w plikach dziennika jest:

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`. 

mam wklejony mój gemfile poniżej:

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 

Bundler ma wykryć odpowiedniego środowiska i ignorować inne klejnoty, prawda? Właśnie teraz usuwam wszystkie linie, które nie znajdują się w domyślnej grupie na serwerze, aby to działało, ale to jest brzydki hack.

+0

Capistrano w produkcji nie wydaje się słuszne? –

Odpowiedz

52

Po dużo kopania Znalazłem rozwiązanie tego problemu. Wszystko, co musiałem zrobić, to uruchomić bundle install --without development test przed uruchomieniem serwera. Spowoduje to dodanie pliku .bundle/config w katalogu głównym szyny z linią BUNDLE_WITHOUT: test:development. Teraz, gdy uruchomisz bundle install lub uruchomisz serwer, zignorujesz te grupy.

From the documentation

Bundler CLI pozwala określić listę grup, których perełki pakiet zainstalować nie należy instalować z opcją --without . Aby określić wiele grup do zignorowania, określ listę grup oddzielonych spacjami.

pakiet zainstalować --without testowy pakiet zainstalować --without testu rozwoju Po uruchomieniu pakiet zainstalować --without teście Bundler będzie pamiętał, że wykluczyć grupę testów w ostatniej instalacji . Następnym razem, gdy uruchomisz instalację pakietu , bez żadnej opcji - bez opcji , bundler wywoła ją.

Ponadto, nazywając Bundler.setup bez parametrów, lub dzwoniąc wymagają „Bundler/Setup Utility” ustawi wszystkie grupy poza te, które Ci wykluczonych poprzez --without (ponieważ nie są one oczywiście dostępne).

+0

To była dobra odpowiedź! –

+0

Dziękujemy! Szukałem składni pliku konfiguracyjnego :) BUNDLE_WITHOUT: test: rozwój – Nultyi

+2

Myślę, że to po prostu zły projekt. Dlaczego domyślnie nie wolno ignorować niczego nie-dewelopera? Nie powinieneś grupować się w gemfile i wykluczać za pomocą wiersza poleceń. Powinien domyślnie działać w środowisku deweloperów, a następnie dołączyć do niego produkcję lub test. W przeciwnym razie jest dużo redundancji i bólów głowy podczas rozwoju. – PhillipKregg

-2

Nie zdefiniowano grupę produkcyjną =)

+0

, więc jeśli mam pustą grupę "produkcyjną", czy to zadziała? –

+0

Dunno, możesz spróbować; p Sprawdź, czy nadal prosi o klejnot spork. – Icid

+0

Niewiele wiem o testowaniu niestety (o.O) – Icid

4

W moim przypadku było instalowanie klejnotów od jenkins env. Musiałem więc ustawić własny pakiet bez zmiennej w 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] 
Powiązane problemy