Convención sobre configuración me ahorra horas
Ejemplos reales e interactivos
Ruby on Rails en vivo
El framework que convirtió a un lenguaje “feliz” en la forma más rápida de pasar de una idea a una aplicación web real. Esta página está hecha con Rails y todo lo que ves abajo corre de verdad en el servidor.
Escanéalo con tu celular
y participa en el tablero en vivo
¿Qué es Ruby on Rails?
Un framework web full-stack escrito en Ruby. Trae todo lo necesario para hacer una aplicación: base de datos, servidor, vistas, correo, tareas en segundo plano, tiempo real y hasta el deploy.
Lo creó David Heinemeier Hansson (DHH) en 2004 al extraerlo del código de Basecamp, una herramienta de gestión de proyectos. Su idea: si ya resolví lo mismo diez veces, que el framework lo resuelva por mí.
- 1995 Yukihiro “Matz” Matsumoto publica Ruby en Japón.
- 2004 DHH libera Rails como código abierto.
- 2005 Video “Haz un blog en 15 minutos”: se vuelve viral.
- 2006 Shopify y Twitter arrancan sobre Rails.
- 2008 GitHub nace como una app Rails (y sigue siéndolo).
- 2021 Rails 7 trae Hotwire: interfaces modernas sin un framework de JS.
- 2024 Rails 8: “de cero a producción” sin servicios externos.
¿Quién lo usa en producción?
Shopify procesa millones de tiendas con un monolito Rails; GitHub sigue siendo una de las apps Rails más grandes del mundo.
Ruby: el lenguaje detrás
Da clic en una expresión: la ejecuta Ruby en el servidor ahora mismo
En Ruby todo es un objeto, hasta los números. Por eso puedes escribir 3.times o 2.weeks.from_now. Rails agrega cientos de estos atajos con Active Support.
const hoy = new Date();
hoy.setDate(hoy.getDate() - 3);3.days.agoConvención sobre configuración
Escribe el nombre de un modelo y mira todo lo que Rails deduce
En otros frameworks configuras a mano qué tabla usa cada clase, qué archivo carga cada ruta, cómo se llama cada vista. En Rails el nombre lo decide todo. Escribe un modelo en inglés (singular):
MVC: el viaje de una petición
Lanza una petición real y mira cada paso con sus tiempos
- Router traduce la URL a
controlador#acción. - Controlador recibe la petición y decide qué hacer.
- Modelo (Active Record) habla con la base de datos.
- Vista arma el HTML con los datos.
- El navegador recibe la respuesta.
Active Record: SQL que se lee como español
Arma una consulta y mira el SQL que Rails genera
Cada tabla es una clase y cada fila es un objeto. No escribes SQL: encadenas métodos y Rails lo traduce, lo escapa contra inyecciones y lo ejecuta solo cuando lo necesitas.
class Idea < ApplicationRecord
validates :titulo, presence: true, length: { in: 3..80 }
scope :populares, -> { order(votos: :desc) }
scope :con_votos, -> { where("votos > 0") }
end
Este es el modelo real de esta página. Con esas 5 líneas ya tenemos validaciones, consultas con nombre y una tabla completa.
Rutas REST: una línea, ocho rutas
Esta tabla se lee en vivo del enrutador de esta app
Rails.application.routes.draw do
resources :ideas do
patch :votar, on: :member
end
end
Con resources Rails crea las 7 acciones clásicas de un CRUD (crear, leer, actualizar, borrar) siguiendo REST, más los helpers como ideas_path para no escribir URLs a mano.
| Verbo | Ruta | Acción | Helper | Qué hace |
|---|---|---|---|---|
| PATCH | /ideas/:id/votar |
ideas#votar |
votar_idea_path |
Ruta extra que agregamos |
| GET | /ideas |
ideas#index |
ideas_path |
Lista todas |
| POST | /ideas |
ideas#create |
ideas_path |
Guarda una nueva |
| GET | /ideas/new |
ideas#new |
new_idea_path |
Formulario para crear |
| GET | /ideas/:id/edit |
ideas#edit |
edit_idea_path |
Formulario para editar |
| GET | /ideas/:id |
ideas#show |
idea_path |
Muestra una |
| PATCH | /ideas/:id |
ideas#update |
idea_path |
Actualiza una |
| PUT | /ideas/:id |
ideas#update |
idea_path |
Actualiza una |
| DELETE | /ideas/:id |
ideas#destroy |
idea_path |
Elimina una |
Hotwire: tiempo real sin escribir JavaScript
Abre esta página en tu celular, agrega una idea o vota: aparece en todas las pantallas al instante
after_create_commit -> {
broadcast_prepend_to "ideas"
}
Esa línea en el modelo es todo el “tiempo real”. Rails manda el HTML nuevo por WebSocket (Action Cable) y Turbo lo inserta en la página. Cero JavaScript escrito a mano.
Scaffold: un CRUD completo en un comando
Active Record hace que SQL se lea como español
Hotwire: interfaces en tiempo real sin escribir JS
lo moderno que es
Rails 8 trae su propio deploy con Kamal
Solid: la base de datos hace de Redis
Encola un trabajo y mira las tablas reales de esta página cambiar en vivo
Antes, para tener trabajos en segundo plano, caché y tiempo real necesitabas montar Redis (otro servidor más) con Sidekiq. Rails 8 trae Solid Queue, Solid Cache y Solid Cable: lo mismo, pero en tablas normales de la base de datos.
La cola no desaparece: es una tabla. Un worker revisa solid_queue_ready_executions cada segundo, toma el trabajo, lo ejecuta y llena finished_at. Mientras tanto, la página responde al instante.
class ResumenTableroJob < ApplicationJob
def perform(solicitado_por)
sleep 4
Rails.cache.write("ultimo_resumen", ...)
end
end
ResumenTableroJob.perform_later("Hamlet")
Rails 8 y el deploy de esta página
Lo nuevo y cómo llegó esta página a internet
Kamal 2
Despliega con Docker a cualquier servidor con un solo comando: kamal deploy. Esta página usó la misma idea: Docker en un VPS, sin plataformas de pago.
Solid Queue · Cache · Cable
Colas, caché y WebSockets guardados en la base de datos. Adiós a Redis. Lo viste funcionando en la sección 8.
Autenticación incluida
bin/rails generate authentication crea login, sesiones y recuperación de contraseña.
Propshaft + Import maps
Sin Webpack ni node_modules: el navegador carga los módulos directamente.
rate_limit
Límite de peticiones en una línea. Esta página lo usa: máximo 5 ideas por minuto por persona.
SQLite en producción
Rails 8 lo hace viable para apps reales. Esta página corre con SQLite.
¿Cómo llegó esta página a internet?
- CódigoRails 8 en GitHub
- DockerImagen con Ruby 3.3
- VPS IONOSUbuntu 24.04
- TraefikPublica con HTTPS
- HTTPSLet’s Encrypt
✅ Cuándo brilla
- Startups y MVPs: de idea a producto en días.
- Equipos chicos que quieren hacer todo (full-stack).
- Apps con mucha lógica de negocio y datos (CRUD, paneles, e‑commerce).
⚠️ Ojo con
- Curva para aprender “la magia” de las convenciones.
- Menos ofertas de trabajo que JavaScript o Python en México.
- No es la mejor opción para cálculos muy pesados en tiempo real.