rbenv es un gestor de versiones de Ruby que permite tener varias versiones instaladas en el mismo servidor y elegir cuál usa cada proyecto, sin tocar el Ruby del sistema. Funciona con "shims": pequeños ejecutables que interceptan ruby, gem o bundle y los redirigen a la versión que corresponde según el directorio en el que estés. En este tutorial instalarás rbenv y su plugin ruby-build en Ubuntu 24.04, compilarás Ruby, fijarás una versión por proyecto y gestionarás las gemas con Bundler.
rbenv o RVM
RVM es la alternativa clásica. Ambos resuelven el mismo problema, pero con enfoques distintos:
| rbenv | RVM | |
|---|---|---|
| Cómo cambia de versión | Shims en el PATH | Redefine cd y funciones del shell |
| Aislamiento de gemas | Bundler por proyecto | Gemsets propios además de Bundler |
| Instalación | git clone de dos repositorios | Script de instalación con verificación GPG |
| Intrusividad en el shell | Mínima | Alta |
Hoy Bundler ya aísla las gemas de cada proyecto mediante Gemfile.lock, así que los gemsets de RVM aportan poco. Esta guía usa rbenv, que es más sencillo, predecible y el que recomiendan la mayoría de proyectos Rails. No instales rbenv y RVM a la vez en el mismo usuario: se pisan el PATH.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. rbenv se instala en el directorio personal de ese usuario, sinsudo. - Al menos 2 GB de RAM (o swap): compilar Ruby con poca memoria puede fallar.
- Unos 1,5 GB libres en disco por cada versión de Ruby.
Paso 1: Instalar las dependencias de compilación
ruby-build compila Ruby desde el código fuente, así que necesita un compilador y las librerías de desarrollo de OpenSSL, YAML, zlib, libffi y GMP. rustc es opcional y habilita YJIT, el compilador JIT de Ruby:
sudo apt update
sudo apt install git curl build-essential autoconf libssl-dev libyaml-dev zlib1g-dev libffi-dev libgmp-dev libreadline-dev rustc
Comprueba que el compilador está disponible:
gcc --version | head -n 1
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Paso 2: Instalar rbenv
Clona el repositorio de rbenv en ~/.rbenv:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Añade la inicialización de rbenv a ~/.bashrc. Esta línea pone rbenv en el PATH, activa los shims y el autocompletado cada vez que abres una sesión:
echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
Recarga la configuración del shell:
source ~/.bashrc
Comprueba que el comando rbenv es una función del shell, lo que indica que la inicialización es correcta:
type rbenv | head -n 1
rbenv is a function
Notasi usas zsh, cambia
bashporzshy~/.bashrcpor~/.zshrcen el comando anterior.
Paso 3: Instalar el plugin ruby-build
rbenv solo cambia entre versiones; el comando rbenv install, que descarga y compila Ruby, lo aporta el plugin ruby-build. Clónalo en el directorio de plugins de rbenv:
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
Lista las versiones estables disponibles:
rbenv install --list
3.2.9
3.3.9
3.4.7
jruby-10.0.2.0
mruby-3.4.0
truffleruby-25.0.0
truffleruby+graalvm-25.0.0
Only latest stable releases for each Ruby implementation are shown.
Use `rbenv install --list-all' to show all local versions.
Tu lista mostrará las versiones vigentes cuando ejecutes el comando. Las líneas que son solo números corresponden a CRuby, el Ruby estándar.
Paso 4: Compilar e instalar Ruby
Instala la versión que necesite tu proyecto. En este tutorial se usa 3.4.7 como ejemplo; sustitúyela por la más reciente de tu lista o por la que indique el proyecto:
rbenv install 3.4.7
La compilación tarda entre 3 y 10 minutos según la CPU. Al terminar verás:
==> Installed ruby-3.4.7 to /home/your_user/.rbenv/versions/3.4.7
Define esa versión como la predeterminada para tu usuario:
rbenv global 3.4.7
Comprueba qué Ruby se está usando y de dónde sale:
ruby -e 'puts RUBY_VERSION'
which ruby
rbenv version
3.4.7
/home/your_user/.rbenv/shims/ruby
3.4.7 (set by /home/your_user/.rbenv/version)
Si which ruby devuelve /usr/bin/ruby, el shim no está por delante en el PATH: revisa el paso 2.
Si instalaste rustc, puedes comprobar que YJIT está disponible:
ruby --yjit -e 'puts RubyVM::YJIT.enabled?'
true
Paso 5: Instalar gemas y Bundler
Las gemas se instalan dentro de la versión de Ruby activa, en ~/.rbenv/versions/<versión>/, así que nunca necesitas sudo. Para ahorrar tiempo y espacio en un servidor, desactiva la generación de documentación local de las gemas:
echo "gem: --no-document" > ~/.gemrc
Bundler viene incluido con Ruby. Actualízalo a la última versión y compruébalo:
gem install bundler
bundle -v
Bundler version 2.7.2
Cuando instalas una gema que trae ejecutables, rbenv crea su shim automáticamente. Por ejemplo:
gem install rails
rails -v
Si alguna vez un ejecutable recién instalado no se encuentra, regenera los shims con rbenv rehash.
Paso 6: Fijar una versión de Ruby por proyecto
Cada proyecto puede usar una versión distinta de la global. rbenv la lee de un archivo .ruby-version en el directorio del proyecto (o en cualquiera de sus padres). Instala otra versión para probarlo:
rbenv install 3.3.9
Crea un proyecto y fija en él esa versión:
mkdir ~/proyecto-antiguo
cd ~/proyecto-antiguo
rbenv local 3.3.9
cat .ruby-version
ruby -e 'puts RUBY_VERSION'
3.3.9
3.3.9
Fuera de ese directorio vuelve a usarse la versión global:
cd ~
ruby -e 'puts RUBY_VERSION'
3.4.7
Versiona .ruby-version junto con el Gemfile y el Gemfile.lock. Así cualquier servidor con rbenv usará la misma versión de Ruby y, con bundle install, las mismas versiones de gemas. En un proyecto nuevo el flujo típico es:
cd ~/proyecto-antiguo
bundle init
bundle add rack
bundle install
bundle init crea el Gemfile, bundle add añade la dependencia y bundle install genera Gemfile.lock con las versiones exactas.
Paso 7: Mantener rbenv y eliminar versiones
Las definiciones de nuevas versiones de Ruby llegan con ruby-build. Si rbenv install --list no muestra una versión recién publicada, actualiza los dos repositorios:
git -C ~/.rbenv pull
git -C "$(rbenv root)"/plugins/ruby-build pull
Lista las versiones instaladas; la activa aparece marcada con un asterisco:
rbenv versions
3.3.9
* 3.4.7 (set by /home/your_user/.rbenv/version)
Elimina las que ya no uses para liberar espacio:
rbenv uninstall 3.3.9
Solución de problemas
rbenv: command not found tras abrir una sesión nueva. La línea de inicialización no está en el archivo que lee tu shell. Comprueba con grep rbenv ~/.bashrc que existe y abre una sesión nueva. En sesiones SSH no interactivas (por ejemplo, desde herramientas de despliegue) ~/.bashrc no se carga; en ese caso llama a los binarios con su ruta, como ~/.rbenv/shims/bundle, o ejecuta ~/.rbenv/bin/rbenv exec bundle install.
Ruby no muestra la versión esperada. Ejecuta rbenv version: indica qué archivo fija la versión. Una variable RBENV_VERSION exportada o un .ruby-version en un directorio padre tienen prioridad sobre la versión global.
La compilación falla. ruby-build guarda el log completo en /tmp e indica la ruta al fallar, algo como /tmp/ruby-build.20260925101500.12345.log. Revisa las últimas líneas:
tail -n 40 /tmp/ruby-build.*.log
Los errores psych: Could not be configured o openssl: Could not be configured indican que falta libyaml-dev o libssl-dev; instálalos con el comando del paso 1 y repite rbenv install. Si el proceso muere sin error claro, suele ser falta de memoria: añade swap o compila con MAKE_OPTS="-j1" rbenv install 3.4.7.
Gem::FilePermissionError al instalar gemas. Estás usando el Ruby del sistema en lugar del de rbenv. Comprueba con which gem que la ruta es ~/.rbenv/shims/gem y no uses sudo gem install.
Conclusión
Has instalado rbenv y ruby-build en Ubuntu 24.04, has compilado Ruby, has fijado versiones distintas por proyecto con .ruby-version y gestionas las gemas con Bundler sin sudo. Como siguientes pasos puedes crear una aplicación Rails, ejecutarla con Puma como servicio de systemd y poner Nginx delante como proxy inverso con un certificado TLS.
