rvm.ruby
¿Qué es rvm1-ansible?
Es un rol de Ansible para instalar y gestionar versiones de ruby usando rvm.
¿Por qué deberías usar rvm?
En producción es útil porque compilar una nueva versión de ruby puede tardar fácilmente más de 10 minutos. Eso son 10 minutos con tu CPU funcionando al 100%.
rvm tiene binarios precompilados para muchos sistemas operativos. Eso significa que puedes instalar ruby en aproximadamente 1 minuto, incluso en una instancia micro lenta.
Este rol incluso agrega los binarios de ruby a tu ruta del sistema al hacer una instalación a nivel del sistema. Esto te permite acceder a ellos como si estuvieran instalados sin usar un administrador de versiones, mientras sigues beneficiándote de lo que rvm ofrece.
Instalación
$ ansible-galaxy install rvm.ruby
Variables del rol
A continuación se muestra una lista de valores predeterminados que puedes configurar:
---
# Instalar 1 o más versiones de ruby
# La última versión listada se establecerá como la versión predeterminada de ruby
rvm1_rubies:
- 'ruby-2.3.1'
# Instalar el gem bundler
rvm1_bundler_install: True
# Eliminar una versión específica de ruby (por ejemplo, ruby-2.1.0)
rvm1_delete_ruby:
# Ruta de instalación para rvm (por defecto es usuario único)
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT, asegúrate de
# establecer la ruta de instalación a algo como '/usr/local/rvm'
rvm1_install_path: '~/.rvm'
# Agregar o quitar cualquier bandera de instalación
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT, asegúrate de
# ELIMINAR la bandera --user-install de abajo
rvm1_install_flags: '--auto-dotfiles --user-install'
# Agregar banderas adicionales de instalación de ruby
rvm1_ruby_install_flags:
# Establecer el propietario del directorio de rvm
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT, asegúrate de
# establecer rvm1_user como 'root'
rvm1_user: 'ubuntu'
# URL para el último script de instalación
rvm1_rvm_latest_installer: 'https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer'
# Versión de rvm a usar
rvm1_rvm_version: 'stable'
# Comprobar y actualizar rvm, deshabilitar esto forzará a rvm a nunca actualizar
rvm1_rvm_check_for_updates: True
# Verificación de clave GPG, usa una cadena vacía si deseas omitir esto
# Nota: A menos que sepas lo que estás haciendo, déjalo como está
# Prueba de identidad: https://keybase.io/mpapis
# Mensaje PGP: https://rvm.io/mpapis.asc
rvm1_gpg_keys: '409B6B1796C275462A1703113804BB82D39DC0E3'
# El servidor de claves GPG
rvm1_gpg_key_server: 'hkp://keys.openpgp.org'
# Modo autolib, consulta https://rvm.io/rvm/autolibs
rvm1_autolib_mode: 3
# Crear enlaces simbólicos de los binarios a la ruta del sistema
rvm1_symlink: true
Ejemplos de playbooks
---
- name: Configurar servidores con soporte para ruby para un único usuario
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
rvm1_rubies: ['ruby-2.3.1'],
rvm1_user: 'ubuntu'
}
Si necesitas pasar una lista de versiones de ruby, pásala en un arreglo así.
---
- name: Configurar servidores con soporte para ruby a nivel del sistema
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
become: yes,
rvm1_rubies: ['ruby-2.2.5','ruby-2.3.1'],
rvm1_install_flags: '--auto-dotfiles', # Eliminar --user-install de los valores predeterminados
rvm1_install_path: /usr/local/rvm, # Establecer en la ubicación del sistema
rvm1_user: root # Necesitarás una cuenta root para acceder a la ubicación del sistema
}
rvm_rubies debe especificarse a través de ruby-x.x.x
así que si deseas
ruby 2.2.5, necesitarás pasar un arreglo rvm_rubies: ['ruby-2.2.5']
Instalación a nivel del sistema
El ejemplo anterior configuraría ruby a nivel del sistema. Es muy importante que ejecutes el play como root porque necesitará escribir en una ubicación del sistema especificada por rvm1_install_path.
Al mismo usuario como ansible_user
En este caso, solo sobrescribe rvm_install_path
y por defecto se establece la bandera --user-install
:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/{{ ansible_user }}/.rvm'
A un usuario que no es ansible_user
Aquí necesitarás acceso root porque estarás escribiendo fuera del directorio de inicio del usuario de ansible. Aparte de eso, es lo mismo que el anterior, excepto que proporcionarás una cuenta de usuario diferente:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/someuser/.rvm'
Notas rápidas sobre rvm1_user
En algunos casos, puedes querer que la carpeta de rvm y sus archivos sean propiedad de un usuario específico en lugar de root. Simplemente establece rvm1_user: 'foo'
y cuando se instale ruby, asegurará que foo
sea el propietario del directorio rvm.
Esto usaría become
de Ansible. En caso de fallos (por ejemplo, Error al establecer permisos en los archivos temporales que Ansible necesita crear al convertirse en un usuario no privilegiado
), consulta https://docs.ansible.com/ansible/latest/user_guide/become.html para más detalles y posibles soluciones.
Actualización y eliminación de versiones antiguas de ruby
Un flujo de trabajo común para actualizar tu versión de ruby sería:
- Instalar la nueva versión
- Ejecutar tu rol de aplicación para que el bundle install reinstale tus gems
- Eliminar la versión anterior de ruby
Aprovechar --extra-vars
de ansible
Simplemente agrega --extra-vars 'rvm1_delete_ruby=ruby-2.1.0'
al final de tu comando del playbook y esa versión será eliminada.
Requisitos
Cualquier sistema Linux/Unix que sea compatible con Ansible y cumpla con los requisitos previos de RVM debería funcionar.
La compatibilidad con distribuciones de Linux basadas en Debian, Ubuntu o familias de Redhat se prueba activamente.
La configuración de integración continua de este proyecto actualmente abarca las siguientes plataformas:
- CentOS 6, 7 y 8
- Debian 8, 9 y 10
- Ubuntu 14.04, 16.04, 18.04 y 20.04
Ansible Galaxy
Puedes encontrarlo en la galaxia oficial de ansible si deseas calificarlo.
Contribuciones
Patrocinadores
Conviértete en un patrocinador y obtén tu logo en nuestro README en Github con un enlace a tu sitio.
Licencia
MIT
The official RVM role to install and manage your ruby versions
ansible-galaxy install rvm.ruby