Bundler / gs+dep

(Background)

Rubygems

Una gema (o Ruby gem) es la forma de distribuir las librerías / frameworks

¿Cual es el problema?

Las gemas son instaladas en el "gemset" global

Normalmente, este gemset global es $RUBY_HOME/lib/ruby/gems/2.1.0/gems/

Pueden instalarse varias versiones de la misma gema (incluso incompatibles!)


require 'rake' # *siempre* va a cargar la última versión de rake

Posible escenario

Tenemos instaladas las gemas a-1.0.0, a-2.0.0 y b-1.0.0, la cual depende de a-1.0.0


require 'a'
require 'b'

¿Qué pasa con esto?

¿Qué es?

Instalación


$ gem install bundler

Iniciar un proyecto que use bundler


$ bundle init

Genera un archivo llamado Gemfile (también podemos crearlo manualmente!)

Gemfile

Gemfile de ejemplo


# donde va a ir a buscar las gemas:
source 'https://rubygems.org'

gem 'hobbit' # si no especificamos versión, va a buscar la última
# o incluso podemos generar la gema desde un repositorio git:
# gem 'hobbit', github: 'patriciomacadden/hobbit'

# podemos especificar en que grupo (o entorno) cargar las gemas:
gem 'oktobertest', group: :test

Instalar las dependencias


$ bundle # o bundle install

Calcula un grafo de dependencias e instala todas las gemas en el $GEM_HOME

¡Pero esto no es todo!

2 alternativas

Bundler.require

require 'bundler'

# bundler carga *todas* las gemas especificadas en el Gemfile
Bundler.require

Bundler.require acepta argumentos, siendo estos los grupos de gemas

bundler/setup

require 'bundler/setup'

# bundler no carga las gemas especificadas en el Gemfile,
# hay que hacerlo explícitamente
require 'hobbit'

Nota: es más rápida (en términos de performance) esta forma!

gs+dep

gs

"recreates the absolutely minimal feature set for creating and using gemsets"

Instalación


$ gem install gs

Iniciar un gemset


$ gs init

Iniciar un subshell


$ gs

Todos los comandos posteriores (por ejemplo rake) usarán las gemas del gemset

dep

Basic dependency tracking

Instalación


$ gem install dep

Agregar una dependencia


$ dep add hobbit

Obtiene la última versión de la gema y la agrega al archivo .gems

Instalar dependencias


$ dep install

Instala todas las dependencias (las que no estén ya instaladas)

Eliminar una dependencia


$ dep rm hobbit

Elimina la gema del archivo .gems

Chequear dependencias


$ dep check

¿Preguntas?

¡Gracias!