Herramienta “Páginas amarillas” Manual de Desarrollo Mayo 2013 Herramienta “Páginas amarillas” - Manual de Desarrollo Índice 1.Introducción.................................................................................................................................... 3 2.Recomendaciones para el desarrollo......................................................................................... 4 3.URLs de acceso............................................................................................................................... 4 4.Estructura de directorios de la aplicación.................................................................................5 5.Versiones de gemas Ruby............................................................................................................. 7 6.Base de datos................................................................................................................................. 8 6.1.Modelo entidad-relación...................................................................................................... 8 7.Creación de tablas......................................................................................................................... 9 8.Creación de índices...................................................................................................................... 12 2 Herramienta “Páginas amarillas” - Manual de Desarrollo 1. Introducción El presente documento recoge el manual de Desarrollo y Administración de la herramienta “Páginas amarillas” de Sartu. Páginas amarillas es una aplicación web, y para el desarrollo de la misma se ha elegido el framework web Ruby on Rails (abreviado como RoR o Rails), basado en Ruby, un lenguaje orientado a objetos, interpretado, y especialmente diseñado bajo el principio de “Least Surprise”. Algunas características de RoR son: • Ajax: Prototype, script.aculo.us, jQuery. • Arquitectura MVC (Modelo-Vista-Controlador) y ORM (Mapeo relacional de Objetos): mediante ActiveRecord y Action Pack. • Soporte de internacionalización i10 y i18. • Módulos de seguridad, base de datos, plantillas y validación de formularios. Como software de servidor web, se ha seleccionado Apache con Phusion Passenger. Apache es el referente mundial de servidores web, al que se le añaden los módulos para Ruby y Rack, ambos empaquetados en el módulo libapache2-mod-passenger. Otras combinaciones posibles hubieran sido ej. Nginx con WEBrik (servidor por defecto de RoR) o Mongrel (superior al anterior). Las distintas posibilidades darán resultados diferentes de rendimiento o velocidad, y de consumo de recursos (memoria RAM). Rack es un middleware para encapsular de forma muy sencilla peticiones y respuestas http desde ruby, unificando así los detalles de servidores y frameworks web diferentes. Como base de datos se ha elegido SQLite, aunque de forma semejante al bloque de servidor 3 Herramienta “Páginas amarillas” - Manual de Desarrollo web, es posible usar otros servidores web y otras BBDD (ej. PostgreSQL). 2. Recomendaciones para el desarrollo • Emplear entornos de desarrollo, de pruebas y de producción. Para ello, la configuración a realizar es la correspondiente a ambos en el fichero config/database.yml, haciéndose la carga de datos respectiva mediante: # export RAILS_ENV=development # rake db:seed • Emplear máquinas virtuales para demostraciones. Ej. VirtualBox. • Para indentación del código fuente emplear dos espacios en lugar de tabulador. 3. URLs de acceso Las URLs o rutas del sistema son de la forma: /seccion/controlador/accion/id Para cada sección se muestran una serie de controladores y unas acciones de ese controlador determinadas. 4 Herramienta “Páginas amarillas” - Manual de Desarrollo 4. Estructura de directorios de la aplicación Denominando DIRBASE al directorio en el que se instala la aplicación, se tiene la siguiente estructura (se indican todos los directorios de primer nivel y los subdirectorios más significativos): DIRBASE |--- app |--- controllers |--- helpers |--- models |--- views |--- config |--- db |--- doc |--- files |--- lib |--- log |--- public |--- images |--- javascripts |--- stylesheets |--- script |--- test |--- tmp |--- vendor Salvo en lo referente a la carpeta files, esta estructura de directorios es la estándar en todo proyecto Ruby on Rails. La información contenida en cada directorio es la siguiente: • apps: código de la aplicación, con subdirectorio para MVC y helpers (ficheros auxiliares para dejar código en las vistas, que no se puede dejar en en el modelo o el controlador, y que se separa de la vista para no dificultar la lectura del lenguaje markup en ésta). • cfg: configuración de la conexión a la base de datos, al servidor SMTP, localizaciones para internacionalización. • db: esquema de la base de datos, comandos de creación de la misma, y datos de 5 Herramienta “Páginas amarillas” - Manual de Desarrollo carga inicial. • lib: ficheros de tareas para Rake (en formato .rake). • log: logs o trazas. • public: ficheros web: html, imágenes (gif, png, jpg), css, javascript (.js). • script: utilidades varias. • tmp: información temporal como caché, PIDs, sesiones y sockets. También se almacena aquí el backup de base de datos. • vendor: gemas y plugins de terceros adicionales. Por otra parte, files es el directorio para dejar archivos varios, ej. backups de ficheros e informes. 6 Herramienta “Páginas amarillas” - Manual de Desarrollo 5. Versiones de gemas Ruby Aunque en el manual de instalación se indican los pasos para instalarlas, se muestra aquí el listado con las versiones: • gem 'rails', '3.2.13' • gem 'sqlite3' • gem 'sass-rails', '~> 3.2.3' • gem 'coffee-rails', '~> 3.2.1' • gem 'therubyracer', :platforms => :ruby • gem 'compass-rails' • gem 'zurb-foundation', '~> 3.2.5' • gem 'uglifier', '>= 1.0.3' • gem 'select2-rails', '~> 3.3.1' • gem 'jquery-rails' • gem 'bcrypt-ruby', '~> 3.0.1' • gem 'rails-i18n', '~> 0.7.2' • gem 'will_paginate', '~> 3.0.4' • gem 'strong_parameters', '~> 0.2.0' • gem 'simple_form', '~> 2.1.0' 7 Herramienta “Páginas amarillas” - Manual de Desarrollo 6. Base de datos 6.1. Modelo entidad-relación Herramienta “Páginas amarillas” - Manual de Desarrollo 7. Creación de tablas CREATE TABLE "activities" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "activities_instruments" ( "activity_id" integer NOT NULL, "instrument_id" integer NOT NULL ); CREATE TABLE "countries" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "countries_instruments" ( "country_id" integer NOT NULL, "instrument_id" integer NOT NULL ); 9 Herramienta “Páginas amarillas” - Manual de Desarrollo CREATE TABLE "funders" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "funders_instruments" ( "funder_id" integer NOT NULL, "instrument_id" integer NOT NULL ); CREATE TABLE "instrument_types" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "instruments" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "instrument_type_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "instruments_users" ( "instrument_id" integer NOT NULL, "user_id" integer NOT NULL 10 Herramienta “Páginas amarillas” - Manual de Desarrollo ); CREATE TABLE "reports" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "year" integer NOT NULL, "week" integer NOT NULL, "hours" decimal(6,1) NOT NULL, "user_id" integer, "instrument_id" integer, "activity_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); CREATE TABLE "schema_migrations" ( "version" varchar(255) NOT NULL ); CREATE TABLE "users" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "username" varchar(255) NOT NULL, "password_digest" varchar(255) NOT NULL, "email" varchar(255), "active" boolean DEFAULT 't', "admin" boolean DEFAULT 'f', "password_reset_token" varchar(255), "password_reset_sent_at" datetime, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); 11 Herramienta “Páginas amarillas” - Manual de Desarrollo 8. Creación de índices CREATE INDEX "index_activities_instruments_on_activity_id_and_instrument_id" ON "activities_instruments" ( "activity_id" "instrument_id" ); CREATE INDEX "index_countries_instruments_on_country_id_and_instrument_id" "countries_instruments" ( ON "country_id" "instrument_id" ); CREATE INDEX "index_funders_instruments_on_funder_id_and_instrument_id" "funders_instruments" ( ON "funder_id" "instrument_id" ); CREATE INDEX "instruments" ( "index_instruments_on_instrument_type_id" ON "instrument_type_id" ); 12 Herramienta “Páginas amarillas” - Manual de Desarrollo CREATE INDEX "index_instruments_users_on_instrument_id_and_user_id" "instruments_users" ( ON "instrument_id" "user_id" ); CREATE INDEX "index_reports_on_activity_id" ON "reports" ( "activity_id" ); CREATE INDEX "index_reports_on_instrument_id" ON "reports" ( "instrument_id" ); CREATE INDEX "index_reports_on_user_id" ON "reports" ( "user_id" ); CREATE UNIQUE INDEX "index_users_on_username" ON "users" ( "username" ); CREATE UNIQUE "schema_migrations" ( INDEX "unique_schema_migrations" ON "version" ); 13