2012-06-06 16 views
64

Disculpa si esta es una pregunta tipo RTFM, pero todavía soy nuevo en rails/ruby ​​/ bundler y estoy un poco confundido.rails bundle install producción solo

En nuestro archivo config/application.rb hay este 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 

y en nuestras Gemfile que utilizamos 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 corro RAILS_ENV=production bundle install (o bundle install --deployment), que todavía instala gemas del grupo de desarrollo/prueba ...

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

Respuesta

140

Tome un vistazo a --without opción:

bundle install --without development test

Por defecto Bündler instala todas las gemas y su aplicación utiliza las gemas que necesita. Bundler no sabe nada sobre Rails y el entorno actual.

+2

Sé de '--without', pero parece muy elegante, especialmente teniendo en cuenta las directivas de configuración en' config/application.rb' (que se supone que tratan exactamente esto) y también teniendo en cuenta esta cita: [Rails 3 viene con soporte para hornear con bundler.] (Http://gembundler.com/rails3.html) – gingerlime

+2

El comando de instalación del paquete es totalmente independiente de Rails. Simplemente busca en su Gemfile, no importa qué bibliotecas su aplicación realmente requiera en la configuración mencionada. De hecho, puede omitir Bundler.require y requerir libs manualmente desde cualquier grupo. Estoy de acuerdo en que Rails podría integrarse mejor en este caso con Bundler, pero no es así. –

+2

Ya veo. Así que creo que es justo decir que los rieles saben sobre bundler (es decir, en 'config/application.rb' y también' config/boot.rb'), pero bundler no sabe nada sobre los rieles ... Solo lee el Gemfile y no usa ninguno de esos archivos de rieles. Creo que la moneda finalmente cayó. ¡Gracias por tu ayuda! – gingerlime

0

Una solución alternativa es usar el bundle-only ruby gem. Puede ser utilizado de la siguiente manera:

> gem install bundle-only 
> bundle-only production 

Esta biblioteca no contamina sus configuraciones bundler o aumentar Gemfile.lock; es una alternativa simple a la opción bundle --without every other group incorporada que proporciona bundler.

Cuestiones relacionadas