2011-09-01 19 views
25

Soy un programador principiante pasar por el railstutorial por Michael Hartl, y el aviso de que el proceso para usar gemas en la aplicación es a través de añadir a la Gemfile, y luego hacer un:¿Por qué "paquete de instalar" una gema en lugar de "joya de instalación" para una aplicación de rieles 3?

$ bundle install 

Cualquier razón por la cual uno no solo haría un:

$ [sudo] gem install [the_gem] 

y luego simplemente lo agrega al archivo Gem? Sé que este fue un poco el proceso de vuelta en los carriles 2.

¡Gracias!

Respuesta

3

Con el Gemfile, puede asegurarse de que cualquier otro desarrollador que también trabaje en su aplicación tenga la misma versión de cada gema. También asegura que no has puesto un [the_gem] diferente en tu gema de lo que tienes en tu Gemfile.

36

El uso de bundler en lugar del comando gem para instalar directamente sus gemas le ofrece una gran cantidad de beneficios.

En este caso específico en el que sugiere usar el comando gem para instalarlo y agregarlo posteriormente al Gemfile, el paquete resolverá todas las dependencias por usted cuando instale una gema, que de otro modo podría resolver manualmente.

Para dar un ejemplo, tomemos las siguientes dependencias:

sunspot_rails 
    nokogiri (>= 1.2.0) 

webrat 
    nokogiri (>= 1.3) 

Tanto webrat y sunspot_rails gemas requieren diferentes versiones de nokogiri como una dependencia. Si solo usa el comando gem para instalarlos, es posible que instale ambas versiones de nokogiri o, peor aún, se queje de conflictos de versiones. Bundler será lo suficientemente inteligente como para resolver este conflicto de dependencia e instalar la versión correcta (digamos nokogiri 1.3) y hacer que tanto sunspot_rails como webrat sean felices.

Disculpe por la larga explicación. Pero, ¡espero que entiendas el punto! :)

Y por cierto, debería echar un vistazo a este archivo Gemfile.lock para ver qué paquete hace entre bastidores para usted.

2

Algunas combinaciones de gemas solo tienen sentido en entornos específicos, p. Ej. un cierto DB en desarrollo y otro diferente en producción.

El Gemfile es un registro de lo que su aplicación necesita en cada entorno, y bundle install instala exactamente lo que necesita, teniendo en cuenta las dependencias.

Si alguna de las gemas en su Gemfile ya está instalada en su gemset actual (a través de gem install), el bundler simplemente las usará (en lugar de reinstalarlas).

Cuestiones relacionadas