Ir al contenido principal

Mi primer proyecto web con Ruby y Sinatra

Guía de inicio con Sinatra y PostgreSQL

En este tutorial aprenderás a levantar un esqueleto profesional y escalable para una aplicacion desde cero en Linux.

1. Estructura de Directorios Estándar

Un proyecto profesional debe seguir el patrón MVC (Modelo-Vista-Controlador). Así debe lucir tu carpeta en /home/hugo/dev/ruby/sinatra/nutrigen:

nutrigen/
├── app.rb # Controlador principal y rutas
├── config.ru # Configuración de Rack (para el servidor)
├── Gemfile # Gestión de dependencias (Gemas)
├── Rakefile # Tareas para PostgreSQL (migraciones)
├── public/ # Archivos estáticos (CSS, JS)
│ └── css/style.css
├── views/ # Plantillas de vista (ERB)
│ ├── layout.erb # Estructura base global
│ └── index.erb # Página de inicio
├── models/ # Lógica de datos (Clases Ruby)
├── db/ # Esquemas y migraciones de DB
└── config/ # Configuración de entornos

2. Instalación de Dependencias

Primero, instalamos Ruby y las bibliotecas necesarias para la conexión con PostgreSQL:

sudo apt update
sudo apt install ruby-full build-essential libpq-dev
gem install bundler

Crea el archivo Gemfile en la raíz:

source 'https://rubygems.org'

gem 'sinatra'
gem 'sinatra-contrib'
gem 'pg'      # Driver de PostgreSQL
gem 'sequel'  # ORM ligero y agnóstico
gem 'rake'    # Para tareas de mantenimiento
Instalación Profesional y Segura: Para proteger tu sistema operativo y mantener las librerías aisladas dentro del proyecto, configura la ruta local e instala las gemas con estos comandos:
bundle config set --local path 'vendor/bundle'
bundle install
Al usar este método, las gemas se guardarán en nutrigen/vendor/bundle. Esto garantiza que no necesites usar sudo y que tu entorno sea 100% reproducible.

3. El Controlador Principal (app.rb)

Este archivo gestiona las rutas. Fíjate cómo mantenemos la lógica separada de la vista:

require 'sinatra'
require 'sinatra/reloader' if development?

set :root, File.dirname(__FILE__)
set :views, proc { File.join(root, "views") }

get '/' do
  erb :index
end

get '/pacientes' do
  @titulo = "Gestión de Pacientes"
  erb :index # Reutilizable por ahora
end

4. Plantilla Base (Layout)

Siguiendo las reglas de diseño (padding 0px y sin iconos), configuramos el views/layout.erb:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <style>
        body { margin: 0; padding: 0px; font-family: sans-serif; }
        nav { background: #1a1a1a; color: #fff; padding: 15px; display: flex; }
        nav a { color: #eee; text-decoration: none; margin-right: 20px; font-size: 0.8rem; text-transform: uppercase; }
        .main { width: 100%; }
    </style>
</head>
<body>
    <nav>
        <a href="/">Dashboard</a>
        <a href="/pacientes">Pacientes</a>
        <a href="/config">Sistema</a>
    </nav>
    <div class="main">
        <%= yield %>
    </div>
</body>
</html>
¡Listo! Para arrancar el servidor, y visita localhost:4567.
ruby app.rb -o 0.0.0.0

Comentarios

Entradas populares de este blog

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Instalar Jasper Studio 6.21 para Ubuntu 24.04

Instalar js-studiocomm_6.21.3 en Ubuntu 24.4 Para instalar Jaspersoft Studio en Ubuntu 24.4, sigue estos pasos: 1. Descargar Jasper Studio Descarga la versión js-studiocomm_6.21.3 desde el siguiente enlace: Jaspersoft Studio 6.21.3 2. Crear el directorio de instalación mkdir /opt/jasperstudio 3. Mover el archivo descargado mv /dir_descarga/js-studiocomm_6.21.3_linux_x86_64.tgz /opt/jasperstudio/ cd /opt/jasperstudio 4. Extraer el archivo tar -xvzf js-studiocomm_6.21.3_linux_x86_64.tgz cd js-studiocomm_6.21.3 5. Ejecutar Jaspersoft Studio ./Jaspersoft\ Studio 6. Crear acceso directo en el escritorio Para facilitar el acceso, crea un archivo .desktop en el escritorio: gedit ~/Escritorio/jaspersoft-studio.desktop En el archivo jaspersoft-studio.desktop , agrega lo siguiente: [Desktop Entry] Version=1.0 Ty...