traduccion que hace gems from force ruby bundler

ruby - gems - que hace bundle install



¿Por qué necesita "requiere ''empaquetador/configuración''? (4)

En casi todos los ejemplos de Sinatra que he visto, a pesar de lo que hace, siempre tiene las siguientes dos líneas:

require ''rubygems'' require ''bundler/setup''

En la mayoría de los ejemplos, eliminar el requisito de ''agrupador / configuración'' parece no tener un efecto de ruptura, por lo que estoy confundido acerca de cuándo / dónde debo incluir esto.

Odio usar las cosas sin saber exactamente la razón por la que está allí, así que esperaba que alguien pudiera explicar por qué necesito ambas líneas y lo que hacen.


Entendiendo el proceso de configuración de Bundler

Brian Storti escribió el mejor artículo que puedo encontrar en la configuración de Bundler, del cual se toma la cita .

Entendiendo lo que está pasando

Para decirlo brevemente, lo que está haciendo Bundler es eliminar de $ LOAD_PATH todo lo que no está definido en el Gemfile. $ LOAD_PATH (o simplemente $ :) es la variable global que le dice a Ruby dónde debe buscar las cosas que se requieren, por lo que si una dependencia no está en el Gemfile, no estará en la $ LOAD_PATH, y luego Ruby tiene No hay manera de encontrarlo.

Muéstrame el código

This es el archivo que se carga cuando requerimos ''bundler / setup'', y lo importante aquí es la llamada Bundler.setup . Esta configuración primero limpia la ruta de carga y luego activates solo las gemas definidas en el archivo Gem, lo que básicamente significa agregarlas a la variable $ LOAD_PATH .

Nota: He actualizado los enlaces "Muéstrame el código" a medida que iban a la rama maestra que ha cambiado.



Hay una explicación práctica:

Digamos que queremos usar una gema llamada pristine_text de la rama maestra de github

Gemfile:

gem "pristine_text", github: "nurettin/pristine_text"

main.rb: (incorrecto)

require "pristine_text" # error, can''t find pristine_text

No se puede encontrar, porque la gema no está en un camino que Ruby pueda ver. Si miras el camino real de la gema, verás que está debajo de

/pristine-text-some_commit_id

main.rb: (derecha)

require "bundler/setup" require "pristine_text" # no error

El error se ha ido, porque ahora carga Bundler con las rutas de carga de sus dependencias.


La configuración del paquete "borra" la ruta de carga, por lo que el intento posterior de requerir algo que no esté en Gemfile resultará del error de carga.