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
Publicar un comentario