bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby ​​[cerrado]

102

Soy nuevo en Ruby y trato de entender los siguientes conceptos: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub y estoy confundido.

¿Alguien puede describir una 'mejor práctica' de cómo debo administrar todo esto en una instalación nueva de la última versión de Ubuntu? ¿Qué debo instalar y cómo debo usarlo todo?

Supongo que sudo apt-get install rubyno se recomienda hacer una , pero no estoy seguro. Lo probé en mi sistema además de 'todas las demás cosas de Ruby'. Solo aumenta mi confusión. No estoy hablando de Rails, sino de gemas Ruby normales (por ejemplo, Vagrant, Chef, scripts).

usuario779159
fuente

Respuestas:

184

De acuerdo con la respuesta anterior, esto es mucho para cubrir, así que considérelo como una breve introducción.

las gemas son la forma en que se empaquetan las bibliotecas de Ruby. Son para Ruby lo que los tarros son para Java. Dentro de un archivo de gema, encontrará código Ruby (archivos .rb), pero también pruebas, y un archivo especial que brinda información sobre la gema en sí, como su nombre, dependencias y versión ( gemspec ). Cualquier proyecto Ruby puede definir las gemas que necesita a través de un Gemfile que solo necesita declarar dependencias. Rubygems es el nombre del administrador de paquetes, la herramienta que se usa para instalar los paquetes (mientras que las gemas son los propios paquetes). Rubygems ahora es parte de Ruby.

Bundler es lo que hace que la gestión de gemas sea soportable. Según su archivo Gemfile, una simple llamada al paquete usando la instalación del paquete descargará e instalará todas las gemas requeridas. Usando el comando estándar de gemas, tendrías que instalar cada uno de ellos manualmente, usandogem install <gem_name>. Bundler no es parte de Ruby (en sí mismo está empaquetado como una joya ), pero es un "estándar de facto" para la mayoría de las aplicaciones (no encontrará mucha gente que no lo use, y no hay buenas razones para no usarlo, en realidad).

RVM es una herramienta que le permite instalar múltiples versiones de Ruby en una máquina, cambiando entre ellas cuando sea necesario. Esto se puede utilizar para instalar Ruby 1.8 y 1.9, o incluso un "MRI" (Ruby de Matz, la implementación predeterminada) y alternativas (como JRuby o Rubinius). Tenga en cuenta que RVM no está solo en este campo, consulte, por ejemplo, rbenv .

Un gemset en RVM es un conjunto de gemas específicas para un contexto determinado, por lo general un proyecto. Esto es útil si, por ejemplo, está desarrollando diferentes aplicaciones, cada una con su propio conjunto de gemas, y desea mantenerlas separadas.

system Ruby es, cuando se usa RVM, la versión de Ruby instalada en la máquina (es decir, no a través de RVM).

Si recién está comenzando, las gemas y el paquete son de su interés. Puede dejar a un lado RVM y gemas por ahora.

Martín
fuente
1
Buena respuesta, podría aclarar: ¿Cuál es la diferencia entre gemas y RubyGems? ¿Y entre gemspec y Gemfile? Además, ¿cuáles de estos programas (por ejemplo, el paquete) enumerados anteriormente se incluyen con 'Ruby' y cuáles son aplicaciones independientes (creo que RVM es independiente)? ¿Y es gemset solo un concepto solo dentro de RVM o también está dentro del núcleo de Ruby (u otras cosas, como rbenv mencionado en la otra respuesta)? Y si el empaquetado facilita la administración de gemas, ¿cuál fue la forma de hacerlo antes del empaque? (es decir, ¿cómo manejarías las gemas sin un paquete, solo para que lo sepa, incluso si nunca lo haría de esa manera?) ¡Gracias!
user779159
Entonces, ¿Rubygems es el nombre del administrador de paquetes, que invoca con el comando 'gem'? ¿Y el paquete también forma parte de Ruby, al igual que Rubygems, o tengo que incluirlo de alguna manera?
user779159
2
"Si recién está comenzando ... [puede] dejar a RVM ... a un lado por ahora". A menos que esté en OS X, y el proyecto de Ruby que desea instalar y ejecutar depende de una versión posterior de Ruby a la que viene preinstalada en el sistema operativo. Entonces necesitarás RVM.
Hefesto
Esto no es cierto: "Con el comando estándar de gemas, tendría que instalar cada uno de ellos manualmente". Definitivamente puede instalar todas las gemas en su archivo de gemas usando un solo comando "instalación de gemas"
Andy
1

Está solicitando más información en una pregunta de la que está dentro del alcance de Stack Overflow. Para cubrirlo todo haría falta un libro.

En Ubuntu es fácil instalar y eliminar gemas en la versión del "sistema" de Ruby, así que acostúmbrate a instalar y eliminar gemas normales a través de sudo. (En Mac OS, daría un consejo diferente porque Apple incluye Ruby para su propio uso y no es una buena idea meterse con él). Luego, cuando tenga una idea de cómo funciona toda la idea de la gema, y ​​sepa que quiere múltiples Versiones de Ruby en su sistema, pruebe " rbenv " o " RVM " e instale una o dos versiones en su caja de arena.

Linux facilita agregar / eliminar Ruby a través de una distribución, pero estamos limitados a las versiones que los encargados de la distribución han empaquetado, por lo que normalmente lo instalo desde la fuente. Pero eso es una molestia al administrar varias versiones de Ruby para sistemas de desarrollo, prueba y producción, razón por la cual se inventaron rbenv y RVM : manejan los detalles sucios permitiéndonos concentrarnos en la programación.

He usado tanto rbenv como RVM , y he estado usando rbenv durante los últimos seis meses aproximadamente, con buenos resultados. Es menos complicado que RVM que me gusta. En cualquier caso, facilitan la instalación de diferentes versiones, con conjuntos separados de gemas. Puede tener diferentes versiones de Ruby abiertas en diferentes ventanas de terminal si lo desea, lo que facilita la prueba de compatibilidad.

La regla uno al depurar es hacer cambios uno a la vez, lo cual es cierto para aprender a programar o aprender un nuevo idioma. No se distraiga, simplemente manténgalo simple.

el hombre de hojalata
fuente
1
Nunca sudo ningún administrador de paquetes que no sea el administrador de paquetes del sistema predeterminado (por ejemplo, apt o apt-get). Inevitablemente estropeará su sistema.
imagen