Rails bundle installa solo la produzione


87

Sono ancora nuovo su rails / ruby ​​/ bundler e sono un po 'confuso.

Nel nostro config/application.rbfile c'è questo segmento bundler:

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

e nel nostro Gemfileusiamo diversi gruppi, ad es

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

Ma quando eseguo RAILS_ENV=production bundle install(o bundle install --deployment), installa ancora gemme dal gruppo di sviluppo / test ...

Perché succede o come posso farlo funzionare correttamente?

Risposte:


182

Dai un'occhiata --withoutall'opzione:

bundle install --without development test

Per impostazione predefinita Bundler installa tutte le gemme e la tua applicazione utilizza le gemme di cui ha bisogno. Lo stesso Bundler non sa nulla di Rails e dell'ambiente attuale.


3
Lo so --without, ma sembra molto inelegante, soprattutto considerando quelle direttive di configurazione in config/application.rb(che dovrebbero affrontare esattamente questo) e anche considerando questa citazione: Rails 3 viene fornito con il supporto in bundle con bundler.
gingerlime

2
Il comando di installazione del bundle è totalmente indipendente da Rails. Guarda solo nel tuo Gemfile, non si preoccupa di quali librerie la tua applicazione richiede effettivamente nella configurazione menzionata. In effetti, puoi saltare Bundler.require e richiedere le librerie manualmente da qualsiasi gruppo. Sono d'accordo che Rails potrebbe integrarsi meglio in questo caso con Bundler, ma non è così.
Simon Perepelitsa

2
Vedo. Quindi immagino sia giusto dire che rails conosce bundler (cioè dentro config/application.rbe anche config/boot.rb), ma bundler non sa nulla di rails ... Legge solo Gemfile e non usa nessuno di quei file rails. Penso che la moneta sia finalmente caduta. Grazie per l'aiuto!
gingerlime

in realtà questo sembra elegante in quanto esclude i "gruppi" nel tuo Gemfile, non gli ambienti nella tua app Rails. So che è stato detto, ma quando ci ho pensato in questo modo aveva più senso per me.
jaydel

1
Non sono sicuro che sia qualcosa che è cambiato negli ultimi quattro anni, ma gli argomenti --withoutdovrebbero essere separati con :s, non con spazi. Quindi credo che dovrebbe essere bundle install --without development:test.
Joe Freeman

2

Una soluzione alternativa è usare la bundle-onlygemma rubino . Può essere utilizzato come segue:

> gem install bundle-only
> bundle-only production

Questa libreria non inquina la configurazione o il potenziamento del bundler Gemfile.lock; è una semplice alternativa al built inbundle --without every other group all'opzione che bundlerfornisce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.