Subir tu aplicación Rails a internet significa publicarla en un servidor en la nube para que cualquier persona pueda usarla desde su navegador.
¿Sabías que la mayoría de las apps nunca llegan a internet? No porque sean malas, sino porque el paso del deploy asusta. Hoy vas a perder ese miedo.
De tu computadora al mundo
Cuando desarrollas en tu máquina, solo tú puedes ver la app. Para que otros la usen, necesitas un servidor. Un servidor es una computadora encendida las 24 horas que responde peticiones.
Antes, rentar un servidor costaba mucho dinero. Hoy existen plataformas que te permiten publicar gratis o por muy poco. Las más usadas para Rails son Render y Fly.io. Ambas funcionan bien con aplicaciones pequeñas y medianas.
En este lección usaremos Render porque tiene interfaz visual, soporte para Rails y una capa gratuita generosa.
La historia de Carlos
Carlos es desarrollador junior en Monterrey. Lleva tres semanas construyendo una app de inventario para la tienda de su tío. La app funciona perfecto en su laptop. Pero su tío quiere acceder desde el iPad en la caja registradora.
Carlos pensó que el deploy era complicadísimo. Le tomó dos horas la primera vez. La segunda vez, menos de veinte minutos.
Lo que aprendió Carlos es exactamente lo que vas a aprender tú aquí.
¿Qué necesitas antes de hacer deploy?
Antes de subir tu app, revisa esta lista:
- Tu app corre sin errores en local con
rails server - Tienes una cuenta en GitHub con tu código subido
- Tienes una cuenta gratuita en render.com
- Tu app usa PostgreSQL como base de datos
Ese último punto es importante. En desarrollo muchos usan SQLite, pero los servidores en la nube usan PostgreSQL. Si tu app usa SQLite, necesitas cambiarla antes del deploy.
Cambia SQLite por PostgreSQL
Abre tu Gemfile y busca esta línea:
gem "sqlite3"
Cámbiala por:
gem "pg"
Luego abre config/database.yml y reemplaza su contenido con algo así:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: miapp_development
test:
<<: *default
database: miapp_test
production:
<<: *default
url: <%= ENV["DATABASE_URL"] %>
Esa última línea es clave. En producción, Render va a inyectar automáticamente la URL de la base de datos. Tú no tienes que escribir contraseñas en el código.
Corre bundle install después de editar el Gemfile.
Configura tu app para producción
Rails tiene un modo especial llamado producción. Es más rápido, más seguro y no muestra errores detallados al usuario.
Necesitas una variable de entorno llamada SECRET_KEY_BASE. Render la genera automáticamente. Pero debes decirle a tu app que la use. Revisa que en config/environments/production.rb exista esta línea:
config.require_master_key = true
Si no existe, agrégala. Esto le dice a Rails que necesita una llave secreta para funcionar en producción.
También debes agregar la gema bootsnap si no la tienes, y asegurarte de tener esto en tu Gemfile:
gem "bootsnap", require: false
Por último, para que los assets (CSS, imágenes, JavaScript) funcionen en producción, corre esto antes de hacer push:
rails assets:precompile RAILS_ENV=production
Esto genera archivos optimizados para el servidor.
Sube tu código a GitHub
Render se conecta directo a tu repositorio de GitHub. Cada vez que haces push, puede desplegar automáticamente.
Si aún no tienes tu app en GitHub:
git init
git add .
git commit -m "App lista para deploy"
git branch -M main
git remote add origin https://github.com/tuusuario/miapp.git
git push -u origin main
Asegúrate de tener un archivo .gitignore que ignore /config/master.key y /config/credentials.yml.enc. Esas llaves son privadas y no deben subir al repositorio público.
Crea tu servicio en Render
Ahora viene la parte visual. Entra a render.com y haz esto:
- Clic en New → Web Service
- Conecta tu cuenta de GitHub
- Selecciona el repositorio de tu app
- Render detecta Rails automáticamente
- En Build Command escribe:
bundle install && rails db:migrate assets:precompile - En Start Command escribe:
bundle exec puma -C config/puma.rb - Elige el plan gratuito
- Clic en Create Web Service
Render empieza a construir tu app. Puedes ver los logs en tiempo real. Es como ver una cocina desde el restaurante.
Crea la base de datos en Render
Una cosa más: necesitas una base de datos PostgreSQL en la nube. En Render:
- Clic en New → PostgreSQL
- Dale un nombre (por ejemplo:
miapp-db) - Elige el plan gratuito
- Copia la Internal Database URL
- Ve a tu Web Service → Environment → agrega variable
DATABASE_URLcon ese valor
Render conecta tu app con la base de datos automáticamente.
La historia de Valeria
Valeria estudia en la UNAM y construyó una app para vender artesanías de Oaxaca. Quería mostrarla en una feria de emprendedores en la Ciudad de México.
El problema: su laptop no podía estar encendida durante la feria. Necesitaba una URL real.
Siguió exactamente estos pasos. A las 11 de la noche antes de la feria, su app estaba en línea. Al día siguiente, tres compradores hicieron pedidos desde sus teléfonos mientras ella hablaba con otros visitantes.
Su app procesó pedidos por más de $8,500 ese fin de semana. Todo gracias a un deploy bien hecho.
Errores comunes al hacer deploy
No todo sale perfecto la primera vez. Aquí están los errores más frecuentes y cómo resolverlos:
Error: Precompile failed
Significa que hay un problema en tus archivos de CSS o JavaScript. Corre rails assets:precompile localmente para ver el error exacto antes de hacer push.
Error: PG::ConnectionBad
Tu app no puede conectarse a la base de datos. Revisa que la variable DATABASE_URL esté bien configurada en Render.
Error: Missing secret key base
Render necesita la variable SECRET_KEY_BASE. Ve a Environment en tu servicio y agrégala. Puedes generar una con rails secret en tu terminal local.
La app carga pero las imágenes no aparecen Esto pasa cuando subes imágenes al servidor local. En producción necesitas un servicio externo como Amazon S3 o Cloudinary para guardar archivos. Es un paso extra, pero vale la pena.
El deploy tarda más de 10 minutos Es normal la primera vez. Render instala todas las gemas desde cero. Las siguientes veces es más rápido porque usa caché.
Deploy automático con cada push
Una vez que todo funciona, activa el Auto-Deploy en Render. Así, cada vez que hagas git push, tu app se actualiza sola. No tienes que entrar a Render manualmente.
Esto es exactamente lo que hacen empresas como Liverpool o Mercado Libre con sus pipelines de integración continua. Claro que ellos tienen sistemas más complejos, pero el principio es el mismo: un push actualiza producción.
Cuánto cuesta mantener tu app en línea
El plan gratuito de Render tiene un límite: la app "duerme" si no recibe tráfico por 15 minutos. La primera vez que alguien la visita después de eso, tarda unos segundos en despertar.
Si quieres que siempre esté activa, el plan básico cuesta alrededor de $175 al mes. Para una app de negocio real, eso es muy accesible. Muchas pequeñas empresas en México pagan eso o menos por tener su app en línea.
Si creces mucho, puedes migrar a DigitalOcean o AWS. Pero para empezar, Render es más que suficiente.
Lo que aprendiste hoy
Hiciste algo que muchos desarrolladores posponen por meses. Llevaste tu app de tu computadora al mundo real. Eso no es poca cosa.
Carlos pudo mostrarle a su tío el inventario desde el iPad. Valeria vendió artesanías desde su teléfono. Tú puedes hacer lo mismo con lo que construiste.
El deploy no es el final del proyecto. Es el comienzo de la vida real de tu app.