"La era de los frameworks: Ruby On Rails"

3,055 views

Published on

El primer artículo que escribí para la revista Code Users de Argentina (MP Ediciones)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,055
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
84
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

"La era de los frameworks: Ruby On Rails"

  1. 1. 28-32 CODE26.internet.qxd 5/16/06 12:47 PM Page 28 {internet | Ruby} DESARROLLO WEB ÁGIL Ruby On Rails Ruby on Rails es un framework de desarrollo web diseñado para aumentar extremadamente la productividad, que está empezando a causar furor. Enrique Place Consultor especializado /blog/display/5 en Free Software y en Open Source. enriqueplace.blogspot.com 1. Respuesta /dispatcher.rb? Navegador Apache o controller=blog& Web WEBrick action=display& id=5 proximadamente desde 1997 me desempe- A ño como consultor en proyectos relacio- nados con Software Libre, y con el correr de los años, esta temática se ha ido orien- tado al ambiente web. Desde mis inicios, he optado por 6. Pantalla 2. Envío Dispatcher 1. Configure framework 2. Wrap CGI in request PHP, pues era (en mi experiencia) la mejor alternativa 3. Creación disponible entre los lenguajes de desarrollo web. Des- carté opciones propietarias como ASP, y otras Open 4a. CRUDs Registro 5a.Renders Source como Perl, principalmente, porque PHP me Control activo Acción 4b. Envío ofrecía la mayor libertad al más bajo costo. de acción Hasta el día de hoy, sigo pensando lo mismo, pero algo ha cambiado. Cada vez disponemos de menos tiempo para concretar nuestros proyectos, necesita- mos dar más valor agregado a los desarrollos que rea- 5b.Redireccionar lizamos y debemos adaptarnos más rápido a los cam- Mailer bios: lo que sucede es que nos están obligando a ser cada vez más productivos. Si hace algunos años que trabajan en ambientes web y no tienen la filosofía de reaprovechar los avances de [Figura 2] Diagrama que describe el funcionamiento de RoR. sus desarrollo de software en beneficio de los proyec- tos futuros, estarán siendo parte de la famosa “fábrica de ruedas”; es decir, estarán reinventando la rueda de fue desarrollado por completo con el lenguaje de programación Ruby. A pesar forma constante sin aprovechar la experiencia adqui- de que ustedes quizá usen Rails, en algún momento necesitarán escribir códi- rida con el pasar de los años. De esta forma, será im- go en el lenguaje Ruby. Por todas estas razones, es que el nombre combina am- posible ser “extremadamente productivo”. bas cosas: Ruby On Rails RoR está basado fuertemente en una estructura con persistencia de datos, pe- ¿Qué es Ruby On Rails? ro lo que nos debe importar es que las grandes bases de datos del Software Li- Como no debemos tener miedo a lo nuevo ni a los bre, como MySQL y PostgreSQL, se encuentran disponibles. cambios, y debemos estar informados y lograr hacer Su creador, el danés David Heinemeier Hansson (DHH), generó este frame- juicios de valor apoyados en experiencias reales y no work para cubrir las necesidades de desarrollo de un proyecto web, y fue ga- en meras suposiciones, me animé a experimentar con lardonado con el título Best Hacker 2005 en el evento O´Reilly Open Source otras alternativas. Awards, organizado por Google. Ruby On Rails, muchas veces abreviado como RoR, Según ha expresado en entrevistas, esta idea surgió de dos ámbitos de ex- significa “Rubí sobre Rieles” y, por definición, es un periencia al empezar a trabajar con RoR: PHP (rápido y sucio) y Java/J2EE framework Open Source para desarrollo rápido de (lento y limpio). El objetivo de RoR era tratar de unir lo mejor de ambos aplicaciones web. Si somos estrictos, veremos que el (rápido y limpio). nombre está compuesto por dos palabras clave: Ruby por El lenguaje de programación Ruby un lado y Rails por el otro. Vale decir que llegamos indirectamente al lenguaje. A pesar de que la ma- En realidad, el framework se yoría de las distribuciones GNU/Linux incluyen a Ruby (entre muchos otros llama, simplemente, Rails y lenguajes), hasta hace poco tiempo, éste no era muy popular. El autor de Ruby se llama Yukihiro Matsumoto, de origen japonés, más conocido por el seudónimo de Matz. Entre las cualidades de este lenguaje podemos mencionar que es totalmente [Figura 1] orientado a objetos (más que otros muy populares), de alto nivel y, sobre todo, Logo de Ruby On Rails. “divertido de programar” (según las palabras de su autor). 28 users.code
  2. 2. 28-32 CODE26.internet.qxd 5/16/06 12:47 PM Page 29 Concepto base I: el patrón MVC Los Patrones de diseño evitan tener que reinventar la rueda para resolver problemas ampliamente conocidos y resueltos innumera- Person bles veces, a la vez que nos sirven de modelo para hacer soluciones lastName “reutilizables” y “extensibles”, porque aplican las mejores prácticas firstName del Diseño Orientado a Objetos. numberOfDependents Este framework se basa en un patrón de diseño muy conocido, el insert Modelo, Vista, Controlador (MVC). La idea del patrón es separar el update problema en tres capas: el modelo, que representa la lógica del sis- tema; la vista, que se encarga de mostrar la información del mode- getExemption lo; y el controlador, que toma las acciones del usuario del sistema isFlaggedForAudit e interactúa con el modelo y con la vista. getTaxableEarnings Nuestro sistema quedará estructurado en tres capas independien- tes, que tienen responsabilidades distintas y bien diferenciadas, con lo cual se logra que sea más fácil de desarrollar y de mantener. [Figura 3] Representación UML del patrón de diseño ActiveRecord. Concepto base II: el patrón ActiveRecord En Ruby On Rails, el Modelo del patrón MVC se implementa a tra- vés del mapeo del “objeto” con su correspondiente “tabla” en la ba- se de datos. Este patrón resuelve el eterno problema de la comunicación en- tre modelos de datos distintos, entre el Relacional y el Orienta- do a Objetos. ¿Cómo se instala? Existe mucha información en Internet, pero a veces, ésta puede ser inexacta o cometer pequeños errores. Si no tenemos experien- cia en RoR, es frustrante iniciarse con tanta dificultad extra. Instalación en Windows (tres pasos) El primer y mejor tutorial que existe hasta el momento para ha- cer una instalación es de O'Reilly: www.onlamp.com/pub/a/onlam- p/2005/01/20/rails.html (“Rodando con Rubí sobre Rieles”), pero sólo contempla el sistema operativo Windows. Por esa razón, va- mos a hacer una explicación que abarque ambas instalaciones, ya que, a pesar de que son muy parecidas, tienen pequeños detalles que se deben tener en cuenta. [Figura 4] Pantalla de instalación de Rubyinstaller, con las aplicaciones que incluye por defecto. > Paso 1: Instalar Ruby Bajamos el instalador de Ruby desde http://rubyinstaller.ruby- forge.org. Éste ya incluye Gems (http://rubygems.rubyforge.org), la Successfully installed rails-1.0.0 aplicación que permite instalar el framework Rails y que usaremos Successfully installed activesupport-1.2.5 en el paso siguiente. Successfully installed activerecord-1.13.2 Successfully installed actionpack-1.11.2 > Paso 2: Instalar Rails Successfully installed actionmailer-1.1.5 Si ya tenemos instalado Gems, sólo debemos abrir una ventana Successfully installed actionwebservice-1.0.0 que permita escribir comandos desde la línea. Desde la barra de ta- Installing RDoc documentation for reas, presionamos: activesupport-1.2.5... Installing RDoc documentation for Botón de Inicio-> Ejecutar -> y escribe “cmd” activerecord-1.13.2... [Mensaje resumido] Al presionar ENTER, se ejecutará una consola DOS que nos per- mitirá digitar los comandos del instalador del framework. Debere- Si no se agrega el último parámetro (“incluir dependencias”), por mos posicionarnos, primero, en el directorio donde instalamos cada software que falte, va a preguntar si queremos instalarlo, lo Ruby (acción realizada en el Paso 1): que sucede casi en seis oportunidades. cd c:rubybin > Paso 3: Instalar MySQL Al principio, no debemos complicarnos. Si lo que queremos es pro- C:rubybin>gem install rails --remote -- bar el entorno de desarrollo, cuando el instalador de MySQL nos include-dependencies pregunte por el usuario administrador, indicamos “root” y su clave “root”. Más adelante podremos asegurar todas estas configuraciones. Attempting remote installation of 'rails' Updating Gem source index for: Descarga del instalador MySQL: http://gems.rubyforge.org dev.mysql.com/downloads/mysql 29
  3. 3. 28-32 CODE26.internet.qxd 5/16/06 12:47 PM Page 30 {internet | Ruby} Probar la instalación de RoR cd miproyecto En primera instancia, debemos tener disponible el co- ruby script/server mando rails desde nuestra consola. Para probarlo, nos posicionamos en un directorio donde alojaremos nues- El último comando ejecuta el servidor. Nuestro servidor atenderá el puerto tros proyectos web basados en RoR. En Windows, po- 3000. Si usamos el navegador y apuntamos a la dirección http://local- dremos crear la misma estructura a partir del “directo- host:3000 (localhost representa nuestro servidor local), nos deberá responder rio base”, llamado c:rails. un mensaje de bienvenida, como se observa en la [Figura 5]. Nuestro primer proyecto La primera aplicación útil Nos dirigimos al directorio base correspondiente a Para hacer una prueba del nuestro entorno “veloz” de desarrollo, qué mejor nuestro sistema, y ejecutamos el comando rails y el nom- que hacer “esa” actividad que se repite una y otra vez en nuestros sistemas, y bre del proyecto que deseamos crear. La idea es que el que el framework ya tiene sumamente resuelta: nuestro primer ABM (Altas, framework cree un subdirectorio con el nombre que in- Bajas y Modificaciones). gresamos y, luego, él armará una serie de subdirectorios Debemos crear la primera base de datos y la primera tabla. Ejecutamos nues- y archivos que corresponderán a la estructura inicial, pa- tro cliente de turno para trabajar con MySQL (existen muchos, pero podemos ra poder comenzar a trabajar en nuestro proyecto RoR: bajar los oficiales desde www.mysql.com/products/tools), y creamos la base de datos “miproyecto” y la tabla “cliente”, con la siguiente estructura: rails miproyecto CREATE TABLE `miproyecto`.`clientes` ( Esto producirá la siguiente salida por pantalla: `id` int(3) NOT NULL auto_increment, `nombre` varchar(45) default NULL, create `telefono` varchar(45) default NULL, create app/controllers PRIMARY KEY (`id`) create app/helpers ) ENGINE=InnoDB DEFAULT CHARSET=latin1; create app/models create app/views/layouts Tenemos que definir cuál es la configuración de nuestra base de datos, edi- create config/environments tando, en Windows, el siguiente archivo: C:railsmiproyectoconfigdataba- create components se.yml. A continuación, modificamos el nombre de la base, agregamos la cla- create db ve del usuario y comentamos la línea “socket”: create doc create lib development: create lib/tasks adapter: mysql create log database: miproyecto create public/images username: root [Mensaje resumido] password: root #socket: /path/to/your/mysql.sock Entramos en el directorio de nuestra aplicación y ejecu- tamos un mini servidor web para probar que el entorno Si queremos ir rápido y seguro, podemos usar los “andamios” (scaffolding). RoR esté respondiendo: Scaffold es un veloz generador de CRUD: Create, Retrive, Update y Delete, lo que significa, en castellano, un ABM. Posicionados en el directorio base del proyecto, ejecutamos el comando para generar el modelo: C:rails>cd miproyecto C:railsmiproyecto>ruby scriptgenerate scaffold Cliente exists app/controllers/ exists app/helpers/ exists app/views/clientes exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/cliente.rb create test/unit/cliente_test.rb create test/fixtures/clientes.yml create app/views/clientes/_form.rhtml [Mensaje resumido] Nota: si al efectuar los cambios en el código, éstos no se ven reflejados en [Figura 5] Pantalla de bienvenida que nos devuelve el servidor web WEBrick (a pesar de restaurar el navegador), deberemos rei- el servidor WEBrick, confirmando que todo fue niciar el servidor para verlos. http://127.0.0.1:3000/clientes instalado y configurado correctamente. 30 users.code
  4. 4. 28-32 CODE26.internet.qxd 5/16/06 12:47 PM Page 32 {internet | Ruby} Si presionamos sobre New Client, podremos crear nuevos clientes. Luego de agregar el primero, aparecerá la lista de los ingresados en el sistema, junto con tres nuevas operacio- nes que se aplican sobre nuestro ítem: Show, Edit y Destroy (Mostrar, Editar, Destruir). Está de más decir que absolutamente toda la información que vemos, y su comporta- miento, puede modificarse según nuestras necesidades. La “cereza de la torta”: pulir la castellanización Como forma de entrar rápidamente en otro tema, para traducir a nuestro idioma los tex- tos de la aplicación (que, en un principio, son generados en inglés), deberemos editar las [Figura 6] Pantalla principal “plantillas” (templates) de código html. Como estamos dentro del patrón MVC, éstas se en- de nuestro CRUD, desarrollada contrarán en la capa que representa la vista (tema explicado en la introducción al patrón), a través de scaffolding. dentro del directorio de nuestro proyecto y con la extensión .rhtml: C:railsmiproyectoappviewsclientesedit.rhtml Aquí podremos modificar todos los textos que están a la derecha de link_to, como: <%= link_to 'Back', :action => 'list' %> Cambiando por: <%= link_to 'Volver', :action => 'list' %> Si queremos que este comportamiento sea permanente –es decir, que cada vez nuestro sistema genere el código del “andamio”–, deberemos modificar las plantillas del frame- work, ubicadas en: [directorio_instalación_ruby]librubygems1.8gemsactionpack-1.11.2lib [Figura 7] La opción New Client action_controllertemplatesscaffolds nos permite hacer nuestra primera Alta. Conclusión Los expertos dicen que desarrollar con este framework permite crear una aplicación web, al menos, diez veces más rápido que con una herramienta similar en Java. Parte del secreto está en el lenguaje de programación Ruby, en los Patrones de Diseño utiliza- dos y en la filosofía de trabajo que sigue principios de Desarrollo ágil. ¿Será el Santo Grial que estábamos buscando? Aún no tenemos la respuesta, pero el “lado bueno de la fuerza” está fluctuando hacia Ruby On Rails y, gracias a su popularidad, muchos otros proyectos de frameworks para desarrollo web están tomando fuerza; se puede decir que estamos en- trando en “la Era” (¿o la moda?) de este tipo de estrategias de desarrollo. Por lo pronto, recomendamos empezar a conocerlo y a probarlo en ambientes “cerrados” (como una aplicación para una Intranet), poner en práctica todas las operaciones clásicas [Figura 8] Luego de ingresar el primer de ABM y, progresivamente, implementar el resto de nuestros requerimientos para ir su- cliente, tenemos acceso a las opciones mando experiencia en el framework y en este peculiar lenguaje de programación. de modificar o dar de baja. Y el tiempo dirá si esto es una moda o si llegó para destronar a PHP, o tal vez, al mis- mo lenguaje Java con toda su parafernalia. q Enrique Place es Consultor en Tecnologías de la Informa- ción, especializado en Free Software y Open Source desde 1997. Ha participado en varios proyectos gubernamentales y privados uruguayos, donde estas tecnologías fueron un fac- tor clave para el desarrollo de sistemas. En la actualidad, está participando en un proyecto de eGovernment (www.comprasestatales.gub.uy), investigando sobre Ruby On Rails y dictando cursos sobre Programación PHP5 y Patrones de Diseño, en universidades locales. [Figura 9] Finalmente, así se vería Ruby tiene lo mejor de otras la página principal de nuestro ABM tecnologias y eso hace que de Clientes, después de ingresar muchos opten por él. varios registros. 32 users.code

×