En esta lección continuamos trabajando con el ejemplo “Welcome to the Head First Lounge” (p.69), analizando cómo las rutas, la cache del navegador y la configuración del servidor influyen en el desarrollo web.
1. Rutas relativas y absolutas
En el ejemplo “Demo2”, la ruta es relativa, ya que apunta dentro del mismo host. Esto se puede verificar al inspeccionar el código:
- Si apunta al mismo dominio, es relativa.
- Si apunta a otro servidor, es absoluta.
Las rutas relativas son preferibles para mantenimiento y portabilidad, mientras que las absolutas se usan para referencias externas.
cd /var/www/htmlcat style.cssSi cambiamos el nombre del archivo y el navegador aún lo muestra, significa que está sirviendo desde cache. Esto puede ocultar errores (por ejemplo, archivos 404).
Con Firefox Developer Tools → More Tools → Style Editor, podemos ver el contenido real, incluso si el archivo fue borrado o renombrado. Los códigos más comunes son:
- 200: Recurso encontrado.
- 404: Archivo no encontrado.
💡 Consejo: en desarrollo, usa
no-cachepara forzar la recarga real del archivo y evitar confusiones.
2. Organización del proyecto
Para mantener orden y claridad, se recomienda crear directorios separados:
/images/→ para imágenes/css/→ para estilos/js/→ para scripts
Esto evita rutas confusas y facilita el mantenimiento, incluso si se usan rutas absolutas.
Objetivo: que la aplicación funcione correctamente en todos los navegadores estándares (como Mozilla), garantizando al menos un 95% de compatibilidad.
3. Uso de logs y análisis de tráfico
Los archivos de error y acceso de Nginx permiten entender cómo los usuarios interactúan con el sistema:
cd /var/log/nginxsudo cat error.logsudo apt install goaccessCon GoAccess, podemos ver estadísticas en tiempo real:
- Errores 404, 500, tráfico y carga por minuto.
- Permite estimar la demanda (por ejemplo, 1000 hits / 5 minutos).
- Muestra navegadores, IPs y patrones de acceso.
4. Despliegue con Nginx, Puma y Passenger
Para entornos de producción, se recomienda usar Nginx como proxy inverso y Puma como servidor de aplicaciones Ruby on Rails:
# Ejemplo de configuraciónpassenger_enabled on;Sin embargo, Passenger requiere compilación con cada actualización. Por eso, la mejor práctica actual es usar Puma con Nginx como balanceador:
- Nginx atiende las peticiones HTTP.
- Puma ejecuta la aplicación Ruby on Rails.
- Ambos trabajan de forma segura y aislada.
Ventajas:
- Aislamiento entre entornos (cada aplicación usa sus gemas).
- Mayor seguridad (sin permisos privilegiados).
- Menos dependencias y mejor mantenimiento.
5. Puertos y seguridad
En otros servidores (como Java), las aplicaciones suelen correr en el puerto 8080, mientras que Nginx escucha en el 80 y redirige al puerto interno.
⚠️ Nota: los puertos inferiores a 1024 pueden ser explotados; por seguridad, es recomendable usar puertos superiores en producción.
6. Cache y entorno de desarrollo
Ruby on Rails, por defecto, no usa cache en desarrollo, precisamente para evitar errores causados por archivos almacenados en el navegador. Esto permite ver cambios al instante y detectar problemas en rutas, hojas de estilo o vistas.
Glosario
| Término | Definición |
|---|---|
| Ruta relativa | Apunta a un archivo dentro del mismo servidor o carpeta. |
| Ruta absoluta | Incluye el dominio o protocolo completo (ej. https://example.com/img.png). |
| Cache | Memoria temporal del navegador que guarda recursos para acelerar carga. |
| Nginx | Servidor web y proxy inverso ligero y rápido. |
| Puma | Servidor de aplicaciones para Ruby on Rails. |
| Proxy inverso | Servidor que recibe las peticiones y las reenvía a otro servidor interno. |
| GoAccess | Herramienta para analizar logs de Nginx en tiempo real. |
| Passenger | Módulo que permite ejecutar Rails directamente desde Nginx (requiere compilación). |
Reflexión final
Las rutas, el cache y la configuración del servidor son la base invisible de toda aplicación web. Entender cómo viaja una petición, dónde se guarda la información y cómo se despliega un proyecto garantiza no solo un mejor rendimiento, sino también seguridad, mantenimiento y compatibilidad real con los usuarios.