Rails bundle instalar solo producción

87

Todavía soy nuevo en rails / ruby ​​/ bundler y estoy un poco confundido.

En nuestro config/application.rbarchivo hay este segmento de paquete:

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

y en nuestro Gemfileusamos diferentes grupos, por ejemplo

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

Pero cuando ejecuto RAILS_ENV=production bundle install(o bundle install --deployment), todavía instala gemas del grupo de desarrollo / prueba ...

¿Por qué sucede esto o cómo puedo hacer que esto funcione correctamente?

jengibre
fuente

Respuestas:

182

Eche un vistazo a la --withoutopción:

bundle install --without development test

De forma predeterminada, Bundler instala todas las gemas y su aplicación usa las gemas que necesita. Bundler no sabe nada sobre Rails y el entorno actual.

Simón Perepelitsa
fuente
3
Lo sé --without, pero parece muy elegante, particularmente considerando esas directivas de configuración en config/application.rb(que se supone que tratan exactamente esto) y también considerando esta cita: Rails 3 viene con soporte horneado con bundler.
gingerlime
2
El comando de instalación del paquete es totalmente independiente de Rails. Solo busca en su Gemfile, no le importa qué bibliotecas su aplicación realmente requiere en la configuración mencionada. De hecho, puede omitir Bundler.require y requerir bibliotecas manualmente de cualquier grupo. Estoy de acuerdo en que Rails podría integrarse mejor en este caso con Bundler, pero no es así.
Simon Perepelitsa
2
Veo. Así que supongo que es justo decir que rails sabe sobre bundler (es decir, en config/application.rby también config/boot.rb), pero el bundler no sabe nada sobre rails ... Solo lee el Gemfile y no usa ninguno de esos archivos de rails. Creo que finalmente cayó la moneda. ¡Gracias por tu ayuda!
gingerlime
en realidad, esto parece elegante ya que excluye 'grupos' en su Gemfile, no entornos en su aplicación Rails. Sé que se ha dicho esto, pero cuando lo pensé de esta manera, tenía más sentido para mí.
Jaydel
1
No estoy seguro de si esto es algo que ha cambiado en los últimos cuatro años, pero --withoutse supone que los argumentos deben estar separados con :s, no con espacios. Entonces creo que debería ser bundle install --without development:test.
Joe Freeman
2

Una solución alternativa es utilizar la bundle-onlygema de rubí . Se puede utilizar de la siguiente manera:

> gem install bundle-only
> bundle-only production

Esta biblioteca no contamina las configuraciones o el aumento de su empaque Gemfile.lock; es una alternativa simple a la bundle --without every other groupopción incorporada que bundlerofrece.

Tom Lord
fuente