Ruby on Rails
Gemas
Buscar..
Observaciones
Documentación de Gemfile
Para los proyectos que se espera que crezcan, es una buena idea agregar comentarios a su Gemfile
. De esa manera, incluso en configuraciones grandes, aún sabrás qué hace cada gema, incluso si el nombre no se explica por sí mismo y lo agregaste hace 2 años.
Esto también puede ayudarlo a recordar por qué eligió una determinada versión y, por lo tanto, volver a evaluar el requisito de la versión más adelante.
Ejemplos:
# temporary downgrade for TeamCity
gem 'rake', '~> 10.5.0'
# To upload invoicing information to payment provider
gem 'net-sftp'
¿Qué es una gema?
Una gema es el equivalente a un complemento o una extensión para el lenguaje de programación ruby.
Para ser exactos, los rieles no son más que una gema. Muchas gemas se construyen sobre rieles u otras gemas (dependen de dicha gema) o son independientes.
En tu proyecto Rails
Gemfile
Para tu proyecto de Rails tienes un archivo llamado Gemfile
. Aquí puede agregar gemas que desee incluir y usar en su proyecto. Una vez agregado, debe instalar la gema utilizando bundler
(vea la sección bundler
).
Gemfile.lock
Una vez que hayas hecho esto, tu Gemfile.lock
se actualizará con tus gemas recién agregadas y sus dependencias. Este archivo bloquea las gemas usadas para que usen esa versión específica declarada en ese archivo.
GEM
remote: https://rubygems.org/
specs:
devise (4.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0, < 5.1)
responders
warden (~> 1.2.3)
Este ejemplo es para el devise
gema. En el Gemfile.lock
la versión 4.0.3
, para indicar cuándo se instala su proyecto en otra máquina o en su servidor de producción qué versión específica se debe usar.
Desarrollo
Una sola persona, un grupo o toda una comunidad trabaja y mantiene una gema. El trabajo realizado generalmente se libera después de issues
se hayan solucionado ciertos issues
o se hayan agregado features
.
Por lo general, los lanzamientos siguen el principio de versión semántica 2.0.0 .
Bundler
La forma más fácil de manejar y administrar gemas es mediante el uso de bundler
. Bundler es un gestor de paquetes comparable a bower.
Para usar bundler primero necesitas instalarlo.
gem install bundler
Después de tener el empaquetador en funcionamiento, todo lo que necesita hacer es agregar gemas a su Gemfile
y ejecutar
bundle
en tu terminal Esto instala sus gemas recién agregadas a su proyecto. Si surgiera un problema, obtendría un aviso en su terminal.
Si está interesado en obtener más detalles, le sugiero que eche un vistazo a los documentos .
Gemfiles
Para comenzar, gemfiles requiere al menos una fuente, en la forma de la URL para un servidor RubyGems.
Genere un Gemfile con la fuente predeterminada rubygems.org ejecutando bundle init
. Use https para que su conexión al servidor se verifique con SSL.
source 'https://rubygems.org'
A continuación, declare las gemas que necesita, incluidos los números de versión.
gem 'rails', '4.2.6'
gem 'rack', '>=1.1'
gem 'puma', '~>3.0'
La mayoría de los especificadores de versión, como> = 1.0, se explican por sí mismos. El especificador ~> tiene un significado especial. ~> 2.0.3 es idéntico a> = 2.0.3 y <2.1. ~> 2.1 es idéntico a> = 2.1 y <3.0. ~> 2.2.beta coincidirá con versiones preliminares como 2.2.beta.12.
Los repositorios de Git también son fuentes de gemas válidas, siempre que el repositorio contenga una o más gemas válidas. Especifique qué comprobar con :tag
:branch
, o :ref
. El valor predeterminado es la rama master
.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Si desea utilizar una gema desempaquetada directamente desde el sistema de archivos, simplemente configure la opción: ruta a la ruta que contiene los archivos de la gema.
gem 'extracted_library', :path => './vendor/extracted_library'
Las dependencias se pueden colocar en grupos. Los grupos pueden ignorarse en el momento de la instalación (usando --without
) o requerirse de una sola vez (usando Bundler.require
).
gem 'rails_12factor', group: :production
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'dotenv-rails'
end
Puede especificar la versión requerida de Ruby en el Gemfile con ruby
. Si el Gemfile se carga en una versión diferente de Ruby, Bundler generará una excepción con una explicación.
ruby '2.3.1'
Gemas
Si está utilizando RVM(Ruby Version Manager)
entonces es una buena idea usar un gemset
de gemset
para cada proyecto. Un gemset
es solo un contenedor que puedes usar para mantener las gemas separadas unas de otras. Crear un conjunto de gemset
por proyecto le permite cambiar gemas (y versiones de gemas) para un proyecto sin romper todos los otros proyectos. Cada proyecto solo necesita preocuparse por sus propias gemas.
RVM
proporciona (> = 0.1.8) un @global gemset
por intérprete de rubíes. Las gemas que instala en el conjunto de @global gemset
para un rubí determinado están disponibles para todos los demás conjuntos de gemas que cree en asociación con ese rubí. Esta es una buena manera de permitir que todos sus proyectos compartan la misma gema instalada para una instalación específica de un intérprete de Ruby.
Creando gemsets
Supongamos que ya tiene instalado ruby-2.3.1
y lo ha seleccionado con este comando:
rvm use ruby-2.3.1
Ahora para crear gemset para esta versión rubí:
rvm gemset create new_gemset
donde el new_gemset
es el nombre de gemset. Para ver la lista de gemsets disponibles para una versión ruby:
rvm gemset list
para enumerar las gemas de todas las versiones de ruby:
rvm gemset list_all
para usar un gemset de la lista (supongamos que new_gemset
es el gemset que quiero usar):
rvm gemset use new_gemset
También puede especificar la versión de ruby con el conjunto de gemas si desea cambiar a otra versión de ruby:
rvm use ruby-2.1.1@new_gemset
para especificar un conjunto de gemas predeterminado para una versión particular de ruby:
rvm use 2.1.1@new_gemset --default
para eliminar todas las gemas instaladas de un conjunto de gemas, puede vaciarlo de la siguiente manera:
rvm gemset empty new_gemset
para copiar un conjunto de gemas de un rubí a otro puedes hacerlo de la siguiente manera:
rvm gemset copy 2.1.1@rails4 2.1.2@rails4
para eliminar un gemset:
rvm gemset delete new_gemset
para ver el nombre actual de gemset:
rvm gemset name
para instalar una gema en el conjunto global de gemas:
rvm @global do gem install ...
Inicializando Gemsets durante Ruby Instalaciones
Cuando instala un nuevo ruby, RVM no solo crea dos gemsets (el gemset vacío y el gemset global), sino que también utiliza un conjunto de archivos editables por el usuario para determinar qué gemas instalar.
Al trabajar en ~/.rvm/gemsets
, rvm busca global.gems
y default.gems
usando una jerarquía de árbol basada en la cadena ruby que se está instalando. Usando el ejemplo de ree-1.8.7-p2010.02
, rvm verificará (e importará) los siguientes archivos:
~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems
~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems
~/.rvm/gemsets/ree/1.8.7/global.gems
~/.rvm/gemsets/ree/1.8.7/default.gems
~/.rvm/gemsets/ree/global.gems
~/.rvm/gemsets/ree/default.gems
~/.rvm/gemsets/global.gems
~/.rvm/gemsets/default.gems
Por ejemplo, si editó ~/.rvm/gemsets/global.gems
agregando estas dos líneas:
bundler
awesome_print
Cada vez que instalas un nuevo rubí, estas dos gemas se instalan en tu conjunto global de gemas. global.gems
archivos default.gems
y global.gems
generalmente se sobrescriben durante la actualización de rvm.