Introducción
A medida que crecen las aplicaciones de Ruby, la cantidad de bibliotecas externas que usan estas aplicaciones puede crecer al mismo ritmo, si no más rápido, en algunos casos. Este crecimiento puede plantear problemas cuando las gemas instalan sus dependencias. Si dos gemas se basan en diferentes versiones de la misma biblioteca, al instalar ambas gemas se corre el riesgo de crear un escenario de error debido a incompatibilidades de gemas. Bundler, una gema de Ruby, le brinda una manera fácil de administrar estas gemas y evitar conflictos, lo que le permite concentrarse en el código de su aplicación en lugar de solucionar problemas con las bibliotecas de soporte.
Requisitos
- Versión de Ruby:2.2.1 o posterior
Nota:este artículo usa vim para la edición de texto. Reemplace "vim" con el editor de su elección si prefiere usar una herramienta de edición de texto diferente. (Y si accidentalmente te encuentras atrapado en vim, aquí hay algunos consejos para ayudarte a despegarte).
.
Gestión de interdependencias complejas
A medida que su aplicación crece en complejidad, es posible que vea conflictos de versión en el conjunto de gemas de su aplicación. Estos conflictos pueden impedir que su aplicación funcione correctamente a medida que aumenta la cantidad de gemas que usa y la cantidad de interdependencias de gemas. Puede considerar usar RVM de una manera más restrictiva, pero esta solución solo le brinda la oportunidad de controlar la versión actual de Ruby y el conjunto de gemas asociado; no maneja los problemas de dependencia de gemas, que pueden ocurrir entre diferentes versiones de gemas que usan la misma versión base de el lenguaje Rubí. Revisar las dependencias de todas las gemas para encontrar estos conflictos y descargar versiones de gemas compatibles es un proceso largo y tedioso. Afortunadamente, podemos usar la gema Bundler para administrar nuestros conjuntos de gemas y eliminar las conjeturas sobre el uso de bibliotecas compartidas.
.
Instalando Bundler para administrar gemas
Para comenzar con Bundler, primero debemos instalar la gema:
gem install bundler
Tenga en cuenta que algunas versiones de Ruby pueden usar el formulario gem2.2 install bundler
.
Este comando instala Bundler en el entorno de ejecución actual de Ruby. A continuación, debe crear un Gemfile para administrar las gemas de su aplicación. Agregue un nuevo archivo en el directorio raíz de su aplicación y ábralo para editarlo:
vim Gemfile
Nota:Bundler, de forma predeterminada, busca el nombre de archivo Gemfile
, en mayúsculas exactamente como se muestra. Fallará, por ejemplo, si en su lugar llamaste a tu archivo gemfile
.
Puede agregar sus gemas en este punto o dejar el archivo vacío si no tiene dependencias de gemas externas. Bundler usa este Gemfile cuando descarga e instala gemas para su aplicación.
.
Anatomía de un Gemfile
Un Gemfile le brinda muchas formas diferentes de administrar los conjuntos de gemas de su aplicación. Puede, por ejemplo, especificar una nueva fuente de gemas en su Gemfile, que se buscará al ejecutar la instalación:
source 'https://rubygems.org'
Puede agregar fácilmente nuevas dependencias de gemas colocándolas en líneas individuales, precedidas por la palabra gem
. Por ejemplo, la siguiente línea especifica nokogiri
como una dependencia de gemas para su aplicación:
gem 'nokogiri'
También puede especificar versiones de gemas específicas utilizando la sintaxis familiar de RubyGems. La siguiente línea agrega la gema Rails, pero la restringe a Rails versión 3.0.0.beta3:
gem 'rails', '3.0.0.beta3'
También puede especificar grupos de gemas que solo se ejecutan en entornos específicos. Por ejemplo, el siguiente bloque instala rspec
, guard
y factory_girl
cuando el entorno de Rails es test
o development
:
group :test, :development do gem 'rspec' gem 'guard' gem 'factory_girl' end
Estos ejemplos son sólo un comienzo. Hay una serie de otras características útiles de un Gemfile en bundler.io.
.
Instalación de todas las gemas con Bundler
Una vez que haya llenado su Gemfile con gemas para instalar, puede instalar todas las gemas de su entorno actual con el siguiente comando:
bundle install
Este comando analiza su Gemfile y rastrea todas las gemas indicadas de las fuentes disponibles tanto en su sistema como en el propio Gemfile. Examina todas las gemas en busca de dependencias compartidas y luego genera un nuevo archivo (Gemfile.lock
) que contiene todas las gemas compatibles y sus versiones. Finalmente, se mueve a través del Gemfile.lock
creado archivo, instalando cada gema relevante. Al finalizar, las gemas de su aplicación estarán disponibles para usar en su código de aplicación.
.
Otros comandos útiles del paquete
Además de eliminar todos los dolores de cabeza de administrar gemas con dependencias compartidas, Bundler también le brinda varias otras herramientas con las que puede administrar el conjunto de gemas de su aplicación. A continuación se muestran algunos comandos de ejemplo que pueden resultarle útiles durante el desarrollo:
Para actualizar todas las gemas en Gemfile a la última versión compatible:
bundle update
En entornos de producción, en lugar de resolver gemas dinámicamente de todas las fuentes disponibles, es posible que desee instalar solo las gemas especificadas en Gemfile.lock.
bundle install --deployment
Para ejecutar un comando dentro del contexto del Gemfile de una aplicación:
bundle exec XXXX
Sin la adición de bundle exec
, el comando XXXX se ejecutaría en el contexto de Ruby del sistema, que puede contener gemas incompatibles.
Puede revisar otros comandos disponibles y sus usos previstos aquí.
.
Conclusión
Un problema común entre los lenguajes de programación es el concepto de "infierno de dependencia", que surge cuando dos o más bibliotecas de terceros dependen de diferentes versiones de la misma biblioteca compartida. Bundler brinda a los desarrolladores de Ruby una herramienta fácil de usar para instalar y administrar conjuntos de gemas complejos. Ayuda a resolver todos los problemas de dependencia y le proporciona un registro de compatibilidad para todas las dependencias de su aplicación. Mediante el uso de Bundler, puede resolver rápidamente los conflictos en sus gemas consumidas y volver a trabajar en la parte esencial del código de su aplicación.
Atlantic.Net
Atlantic.net ofrece alojamiento VPS, así como servicios de alojamiento gestionados que incluyen una capa de servicios gestionados esenciales para el negocio en sus paquetes de alojamiento. Contáctenos hoy para obtener más información.
.
.