Das Rails-Bundle installiert nur die Produktion

86

Ich bin noch neu in Rails / Ruby / Bundler und bin ein wenig verwirrt.

In unserer config/application.rbDatei befindet sich dieses Bundlersegment:

if defined?(Bundler)         
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

und in unseren verwenden Gemfilewir verschiedene Gruppen, z

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end

Aber wenn ich RAILS_ENV=production bundle install(oder bundle install --deployment) starte, werden immer noch Edelsteine ​​aus der Entwicklungs- / Testgruppe installiert ...

Warum passiert das oder wie kann ich das richtig machen?

Ingwerlime
quelle

Antworten:

177

Schauen Sie sich die --withoutOption an:

bundle install --without development test

Standardmäßig installiert Bundler alle Edelsteine ​​und Ihre Anwendung verwendet die benötigten Edelsteine. Bundler selbst weiß nichts über Rails und die aktuelle Umgebung.

Simon Perepelitsa
quelle
2
Ich weiß Bescheid --without, aber es scheint sehr elegant zu sein, insbesondere wenn man die Konfigurationsanweisungen in config/application.rb(die genau dies ansprechen sollen) und auch dieses Zitat berücksichtigt: Rails 3 wird mit Backed zur Unterstützung von Bundler geliefert.
Ingwerlime
2
Der Bundle-Installationsbefehl ist völlig unabhängig von Rails. Es schaut nur in Ihre Gemfile, es ist egal, welche Bibliotheken Ihre Anwendung in der genannten Konfiguration tatsächlich benötigt. Tatsächlich können Sie Bundler.require überspringen und Bibliotheken von jeder Gruppe manuell anfordern. Ich bin damit einverstanden, dass Rails in diesem Fall besser in Bundler integriert werden könnte, aber das tut es nicht.
Simon Perepelitsa
2
Aha. Ich denke, es ist fair zu sagen, dass Rails etwas über Bundler weiß (dh in config/application.rbund auch config/boot.rb), aber Bundler weiß nichts über Rails ... Es liest nur die Gemfile und verwendet keine dieser Rails-Dateien. Ich denke, die Münze ist endlich gefallen. Danke für Ihre Hilfe!
Gingerlime
Tatsächlich scheint dies elegant zu sein, da es "Gruppen" in Ihrer Gemfile ausschließt, nicht Umgebungen in Ihrer Rails-App. Ich weiß, dass dies gesagt wurde, aber als ich so darüber nachdachte, machte es für mich mehr Sinn.
Jaydel
1
Ich bin mir nicht sicher, ob sich dies in den letzten vier Jahren geändert hat, aber Argumente, --withoutdie durch :s getrennt werden sollen , nicht durch Leerzeichen. Also ich glaube es sollte sein bundle install --without development:test.
Joe Freeman
2

Eine alternative Lösung ist die Verwendung des bundle-onlyRubin-Edelsteins . Es kann wie folgt verwendet werden:

> gem install bundle-only
> bundle-only production

Diese Bibliothek verschmutzt Ihre Bundler-Konfigurationen oder -Erweiterungen nicht Gemfile.lock. Es ist eine einfache Alternative zu der integrierten bundle --without every other groupOption bundler.

Tom Lord
quelle