ruby-on-rails rubygems bundler railstutorial.org

ruby on rails - ¿Por qué “instalar en paquete” una gema en lugar de “instalar gema” para una aplicación de Rails 3?



ruby-on-rails rubygems (3)

Algunas combinaciones de gemas solo tienen sentido en entornos específicos, por ejemplo, un db determinado en desarrollo y otro diferente en producción.

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

Si alguna de las gemas en tu Gemfile ya está instalada en tu gemset actual (a través de gem install ), entonces el agrupador solo las usará (en lugar de volver a instalarlas).

Soy un programador principiante que railstutorial por michael hartl, y me doy cuenta de que el proceso para usar gemas en la aplicación es agregarlo al archivo gem, y luego hacer una:

$ bundle install

Cualquier razón por la que uno no haría simplemente un:

$ [sudo] gem install [the_gem]

¿Y luego simplemente agregarlo al archivo Gem? Sé que esto fue algo así como el proceso de vuelta en los carriles 2.

¡Gracias!


Con 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 hayas puesto un [the_gem] diferente en tu comando de gema de lo que tienes en tu Gemfile.


El uso de bundler en lugar del comando gem para instalar directamente sus gemas le brinda muchos beneficios.

En este caso específico en el que sugiere utilizar el comando gema para instalarlo y agregarlo más tarde al Gemfile, Bundler resolverá todas las dependencias por usted cuando instale una gema, que podría tener que resolver manualmente de lo contrario.

Para darle un ejemplo, tomemos las siguientes dependencias:

sunspot_rails nokogiri (>= 1.2.0) webrat nokogiri (>= 1.3)

Las gemas webrat y sunspot_rails requieren versiones diferentes de nokogiri como una dependencia. Si solo usas el comando gem para instalarlos, podría instalar ambas versiones de nokogiri o, peor aún, quejarse de los conflictos de versiones. Bundler será lo suficientemente inteligente como para resolver este conflicto de dependencia e instalar la versión correcta (por ejemplo, nokogiri 1.3) y hacer felices tanto a sunspot_rails como a webrat!

Lo siento por la larga explicación. Pero, espero que te entiendas! :)

Y por cierto, deberías echar un vistazo a este archivo Gemfile.lock para ver qué hace el agrupador detrás de escena por ti.