2010-12-14 8 views
22

Ich habe eine kleine Web-App, die eine Reihe von Edelsteinen verwendet. Einige von ihnen werden nur für test und development Umgebungen verwendet. Wenn ich jetzt versuche, ein Unicorn auf dem Produktionsserver mit dem folgenden Befehl zu starten, schlägt es fehl.Bundler falsch versucht, "Entwicklung" und "Test" -Gruppe Edelsteine ​​in der Produktion zu installieren

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

Der Fehler, den ich in den Protokolldateien ist:

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

ich meine gemfile unten eingefügt haben:

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 

Bündler soll die richtige Umgebung erkennen und ignorieren, die andere Edelsteine, richtig? Im Moment lösche ich alle Zeilen, die nicht in der Standardgruppe auf dem Server sind, damit das funktioniert, aber das ist ein hässlicher Hack.

+0

Capistrano in der Produktion scheint nicht wahr? –

Antwort

52

Nach viel ich graben die Fehlerbehebung für dieses Problem gefunden. Alles, was ich tun musste, war bundle install --without development test vor dem Starten des Servers zu laufen. Dies fügt eine .bundle/config Datei in der Schiene root mit der Zeile BUNDLE_WITHOUT: test:development hinzu. Jetzt, wenn Sie bundle install ausführen oder den Server starten, werden diese Gruppen ignoriert.

From the documentation

Der Bündler CLI können Sie eine Liste von Gruppen, deren Edelsteine ​​bündeln installieren sollten nicht installieren mit der --ohne Option angeben. Um mehrere zu ignorierende Gruppen anzugeben, geben Sie eine Liste von Gruppen an, die durch Leerzeichen getrennt sind.

Bündel --ohne Testbündel installieren --ohne Entwicklungstest installieren Nach dem Ausführen Bündel --ohne Test installieren, wird bundler daran erinnern, dass Sie die Testgruppe in der letzten Installation ausgeschlossen. Das nächste Mal, wenn Sie Bundle-Installation ausführen, ohne eine - ohne Option, Bundler wird es zurückrufen.

Auch Aufruf Bundler.setup ohne Parameter oder „Bündler/setup“ Aufruf erfordert Setup alle Gruppen außer für die, die Sie über --ohne ausgeschlossen (da sie offenbar nicht zur Verfügung stehen).

+0

Das war eine nette Antwort! –

+0

Vielen Dank! War auf der Suche nach der Syntax für die Konfigurationsdatei :) BUNDLE_WITHOUT: Test: Entwicklung – Nultyi

+2

Ich denke, das ist nur schlechtes Design. Warum ignorierst du nicht standardmäßig non-dev? Sie sollten die gemfile nicht gruppieren und über die Befehlszeile ausschließen müssen. Sie sollte standardmäßig auf die Entwicklungsumgebung eingestellt sein und dann entweder Produktion oder Test einschließen. Ansonsten ist es eine Menge Redundanz und Kopfschmerzen während der Entwicklung. – PhillipKregg

-2

Sie haben keine Produktionsgruppe definiert =)

+0

Also, wenn ich eine leere "Produktion" Gruppe habe, wird es funktionieren? –

+0

Dunno, du könntest es versuchen; p Schau, ob es noch den Spork-Edelstein fragt. – Icid

+0

Ich weiß nicht viel über das Testen leider (o.O) – Icid

4

In meinem Fall war es die Installation von Edelsteinen von Jenkins env. Also musste ich mein eigenes Bundle ohne Variable in Capistrano setzen.

Gemfile

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

deploy.rb

set :bundle_without, [:development, :test, :jenkins] 
Verwandte Themen