En 2004, la empresa de de­sa­rro­llo web es­ta­dou­ni­de­n­se 37signals (hoy Basecamp) pu­bli­ca­ría la apli­ca­ción de ad­mi­ni­s­tra­ción de proyectos Basecamp, que, entre otras funciones, ofrecía ca­ra­c­te­rí­s­ti­cas tales como un sistema de mensajes, listas de tareas pe­n­die­n­tes o time tracking. Una parte del software era una ar­qui­te­c­tu­ra base que, creada es­pe­cia­l­me­n­te para este fin por el pro­gra­ma­dor David Hei­ne­meier Hansson, fue extraída en el mismo año y publicada en 2005 como un marco de apli­ca­ción web de código abierto. Había nacido el entorno de trabajo Ruby on Rails, también conocido como RoR o Rails. De­sa­rro­lla­do sobre las bases de Ruby, en los inicios del framework, que cuenta  ac­tua­l­me­n­te con un equipo de de­sa­rro­llo de varias personas, nadie imaginó que se co­n­ve­r­ti­ría en una de las so­lu­cio­nes de creación web más uti­li­za­das, contando.

¿Qué es Ruby on Rails?

Desde que se publicó bajo la licencia MIT, los creadores de Ruby on Rails han co­n­ti­nua­do con el de­sa­rro­llo de este framework, ma­n­te­nié­n­do­se fieles al principio “Don’t repeat yourself” (DRY; en español, “no seas re­pe­ti­ti­vo”). En otras palabras, en un proyecto basado en el framework Rails la in­fo­r­ma­ción solo puede uti­li­zar­se una única vez. Por ejemplo, basta con definir las columnas de una tabla en la base de datos sin que dicha in­fo­r­ma­ción se modifique en el código fuente o en un archivo de co­n­fi­gu­ra­ción in­de­pe­n­die­n­te. Así, el módulo Ac­ti­ve­Re­co­rd im­ple­me­n­ta­do lo leerá di­re­c­ta­me­n­te desde la base de datos.

El segundo paradigma de diseño es “Co­n­ve­n­tion over co­n­fi­gu­ra­tion” (en español, “co­n­ve­n­ción sobre co­n­fi­gu­ra­ción”). Ruby on Rails usa ciertas co­n­ve­n­cio­nes, por ejemplo, para nombrar clases. Si eres de­sa­rro­lla­dor y te vales de estas co­n­ve­n­cio­nes, te ahorrarás una gran cantidad de esfuerzos en la co­n­fi­gu­ra­ción. Sin embargo, Ruby on Rails también permite co­n­fi­gu­ra­cio­nes al­te­r­na­ti­vas, por lo que siempre tendrás a di­s­po­si­ción una gran fle­xi­bi­li­dad a la hora de de­sa­rro­llar tu apli­ca­ción web.

Ruby: el lenguaje flexible e in­de­pe­n­die­n­te del framework Rails

A mediados de los años 90, el japonés Yukihiro Matsumoto pu­bli­ca­ría Ruby, un lenguaje orientado a objetos. Aunque en sus inicios este se utilizó casi ex­clu­si­va­me­n­te en Japón, con el paso del tiempo se ha po­si­cio­na­do glo­ba­l­me­n­te como una al­te­r­na­ti­va popular a líderes del mercado como PHP, Python y cía. Sin embargo, el éxito de Matsumoto no es ca­sua­li­dad, pues este se propuso hacer de la pro­gra­ma­ción un proceso divertido y, para lograrlo, decidió combinar las mejores ca­ra­c­te­rí­s­ti­cas de otros lenguajes en Ruby. En la in­te­r­pre­ta­ción de se­cue­n­cias de comandos, el código es ejecutado por un in­té­r­pre­te (algo que en co­m­pa­ra­ción con otro scripts re­pre­se­n­ta una pequeña di­s­mi­nu­ción de la velocidad), co­n­vi­r­tie­n­do a Ruby en una solución mucho más flexible y dinámica. Gracias a que existen in­té­r­pre­tes es­pe­cí­fi­cos para los pri­n­ci­pa­les sistemas ope­ra­ti­vos, el código de Ruby es in­de­pe­n­die­n­te de pla­ta­fo­r­ma. Una ca­ra­c­te­rí­s­ti­ca muy im­po­r­ta­n­te de Ruby es su capacidad mu­l­ti­pa­ra­di­g­ma, donde también sobresale, por ejemplo, C++. En otras palabras, Ruby no está vinculado a un paradigma de pro­gra­ma­ción en pa­r­ti­cu­lar. El “principio de la mínima sorpresa” te permite utilizar el lenguaje de forma intuitiva y, por lo general, no te en­co­n­tra­rás con procesos ine­s­pe­ra­dos. Como software de código abierto bajo licencia libre BSD, Ruby forma parte de una numerosa y activa comunidad que ha co­n­tri­bui­do con numerosas bi­blio­te­cas de programas actuales que también están sujetos a esta licencia y que de­sem­pe­ñan un papel muy im­po­r­ta­n­te en el de­sa­rro­llo de apli­ca­cio­nes web modernas. Estos paquetes de software se pueden instalar, utilizar y ac­tua­li­zar con la ayuda de las llamadas RubyGems. Algunos ejemplos de estas Gems son, por ejemplo, las in­te­r­fa­ces de pro­gra­ma­ción de apli­ca­cio­nes web (API) de Google o de Facebook, así como el framework Rails.

Modelo-Vista-Co­n­tro­la­dor (MVC)

Ruby on Rails usa sistemas cerrados como entorno de ejecución. Estos sistemas contienen el in­té­r­pre­te, las bi­blio­te­cas ne­ce­sa­rias y cada uno de los scripts. Cada proyecto Rails está sujeto a una es­tru­c­tu­ra de di­re­c­to­rios generada au­to­má­ti­ca­me­n­te que separa scripts, co­n­fi­gu­ra­cio­nes, clases, co­n­te­ni­dos y demás. Gracias a este enfoque es­tru­c­tu­ral, en el que se separan datos, gestión y re­pre­se­n­ta­ción, las apli­ca­cio­nes web son muy fáciles de mantener. Esto se conoce como una ar­qui­te­c­tu­ra Modelo-Vista-Co­n­tro­la­dor, cuyas capas se pueden describir de la siguiente manera:

Modelo

No­r­ma­l­me­n­te, las apli­ca­cio­nes Rails están vi­n­cu­la­das a bases de datos re­la­cio­na­les. El framework Ruby necesita modelos para co­mu­ni­car­se con cada sistema de gestión de bases de datos y para pe­r­so­na­li­zar o manipular objetos. Estos modelos forman clases en una tabla de base de datos y atributos in­di­vi­dua­les en las columnas. Por defecto, la capa Modelo se basa en el entorno de trabajo ORM (mapeo objeto-re­la­cio­nal) Ac­ti­ve­Re­co­rd. Gracias a la im­ple­me­n­ta­ción del API para plugins, desde Rails 3.0 es posible utilizar bi­blio­te­cas ORM como, por ejemplo, Sequel.

Vista

La capa Vista o capa de pre­se­n­ta­ción es necesaria para vi­sua­li­zar y acceder a los datos de la capa Modelo. Para este propósito, Ruby on Rails utiliza la clase Action View, que es co­m­pa­ti­ble con di­fe­re­n­tes formatos de salida. Vista renderiza y presenta los datos (p. ej., el usuario so­li­ci­ta­n­te) en forma de do­cu­me­n­tos HTML. Los do­cu­me­n­tos XML o JSON facilitan el acceso a las entradas de la base de datos de otros programas o servicios di­s­po­ni­bles.

Co­n­tro­la­dor

La capa Co­n­tro­la­dor sirve como interfaz entre las capas Modelo y Vista y procesa las so­li­ci­tu­des entrantes a través del navegador web, accede al modelo apropiado de la base de datos y lo transmite a Vista, que se encargará de su vi­sua­li­za­ción. Como unidades centrales de control de las apli­ca­cio­nes Rails, los co­n­tro­la­do­res también ad­mi­ni­s­tran las funciones de al­ma­ce­na­mie­n­to en caché o se hacen cargo de las di­fe­re­n­tes pe­ti­cio­nes que los clientes in­di­vi­dua­les han realizado a lo largo de un período de tiempo en una sola sesión.

Los co­m­po­ne­n­tes estándar de Ruby on Rails

Como entorno de trabajo para apli­ca­cio­nes web, Ruby on Rails pro­po­r­cio­na en su co­n­fi­gu­ra­ción estándar todos los co­m­po­ne­n­tes ne­ce­sa­rios que un de­sa­rro­lla­dor necesita para programar una apli­ca­ción funcional. El único requisito adicional es la in­s­ta­la­ción de Ruby, del gestor de paquetes RubyGems y de una base de datos SQL. Para esta última, el equipo Rails re­co­mie­n­da la bi­blio­te­ca de código abierto escrita en C SQLite, que contiene un sistema de bases de datos re­la­cio­nal. A co­n­ti­nua­ción, pre­se­n­ta­mos los módulos estándar de Ruby on Rails:

  • Action Contoller: con la ayuda de este módulo es posible crear las me­n­cio­na­das in­te­r­fa­ces entre las entradas de las bases de datos, los usuarios y los programas.
  • Action View: este módulo ofrece la po­si­bi­li­dad de crear vistas para las entradas y los co­n­tro­la­do­res. En cuanto a la no­me­n­cla­tu­ra existe la co­n­ve­n­ción de que todas las Views deben ser nombradas como el re­s­pe­c­ti­vo co­n­tro­la­dor. 
  • Active Record: este es el módulo central utilizado para manipular la base de datos de tu apli­ca­ción Rails. Si te adhieres a las co­n­ve­n­cio­nes relativas al nombre y al esquema, solo es necesario realizar algunas co­n­fi­gu­ra­cio­nes mínimas para generar con él los modelos in­di­vi­dua­les. Para este fin, Ruby on Rails ofrece potentes sistemas sca­f­fo­l­di­ng (en español, de “andamiaje”), que son la he­rra­mie­n­ta ideal para producir in­te­r­fa­ces para las cuatro ope­ra­cio­nes CRUD y para presentar el conjunto de datos en el nivel orientado a objetos.
  • Active Resource: im­ple­me­n­ta el mapeo de objeto-re­la­cio­nal (ORM) para servicios web basados en REST. Como Ac­ti­ve­Re­co­rd, este también se concentra en guardar las co­n­fi­gu­ra­cio­nes.
  • Action Mailer: Action Mailer permite enviar y recibir mensajes de correo ele­c­tró­ni­co en tus apli­ca­cio­nes web. De esta forma es posible co­n­fi­gu­rar, sin co­m­pli­ca­cio­nes, el registro e inicio de sesión de correo ele­c­tró­ni­co.
  • Active Support: este co­m­po­ne­n­te contiene varias clases de programas de asi­s­te­n­cia técnica, así como ex­te­n­sio­nes de la bi­blio­te­ca estándar.
  • Railties: los llamados railties fueron creados para asegurar el fu­n­cio­na­mie­n­to de todos los co­m­po­ne­n­tes de RoR. Como co­n­se­cue­n­cia, cada módulo ha im­ple­me­n­ta­do su propio railtie, por ejemplo, para lanzar el proceso de ini­cia­li­za­ción o im­ple­me­n­tar cambios de co­n­fi­gu­ra­ción en el framework. Los railties también son ne­ce­sa­rios para añadir módulos propios a Ruby on Rails.

Ruby on Rails: ventajas y de­s­ve­n­ta­jas de este framework web

En la pla­ta­fo­r­ma wikibooks.org en­co­n­tra­rás una gran cantidad de do­cu­me­n­ta­ción en di­fe­re­n­tes idiomas e incluso, chistes como este:

  • Dos de­sa­rro­lla­do­res están hablando de pro­gra­ma­ción. Uno le dice al otro: “Yo trabajo con Java y doy PHP a mis hijos para que jueguen con él”. Y el otro responde: “¡Yo juego con mis hijos y dejo que Ruby trabaje por mí!”

Por supuesto, en esta broma se encuentra una buena dosis de exa­ge­ra­ción, pero bá­si­ca­me­n­te también una gran parte de verdad. Java es una de las opciones pre­fe­ri­das para so­lu­cio­nes complejas y, por lo tanto, es utilizada en muchos fra­me­wo­r­ks del sector em­pre­sa­rial. Sin embargo, en especial debido a su compleja es­tru­c­tu­ra, programar con este lenguaje in­de­pe­n­die­n­te de pla­ta­fo­r­ma suele ser muy co­m­pli­ca­do y, además, está co­n­s­ta­n­te­me­n­te asociado a altos costes de tiempo y dinero. Como lenguaje de pro­gra­ma­ción in­te­r­pre­ta­do, Ruby tampoco se adjunta a una pla­ta­fo­r­ma en pa­r­ti­cu­lar. Además, escribir un código con Ruby es rápido, fácil de adaptar e implica un esfuerzo mucho menor. Sin embargo, el lenguaje in­té­r­pre­te también se encarga de que la velocidad de las apli­ca­cio­nes de­sa­rro­lla­das sea más lenta que las apli­ca­cio­nes equi­va­le­n­tes en Java.

También PHP, en co­m­pa­ra­ción con Java, re­pre­se­n­ta ventajas si­g­ni­fi­ca­ti­vas en términos de si­m­pli­ci­dad y esfuerzos de de­sa­rro­llo. En el entorno del de­sa­rro­llo web, este lenguaje es re­co­no­ci­do por ser una solución estándar es­ta­ble­ci­da que co­n­s­ti­tu­ye la base de di­fe­re­n­tes sistemas de gestión de co­n­te­ni­dos como Joomla, WordPress, TYPO3 y otros. Debido a que PHP fue compilado de manera algo ar­bi­tra­ria y no siempre se orientó a objetos, ac­tua­li­zar aquellas apli­ca­cio­nes web que fueron de­sa­rro­lla­das con versiones an­te­rio­res puede resultar algo tedioso. Por su parte, desde sus inicios, Ruby on Rails estuvo orientado a objetos, por lo que las apli­ca­cio­nes que se pro­gra­ma­ron uti­li­za­n­do versiones más antiguas contienen un código mucho más limpio que algunos proyectos PHP.

Ruby on Rails ofrece un entorno de trabajo integrado que permite probar la fu­n­cio­na­li­dad de la apli­ca­ción en cualquier momento, de tal forma que los errores pueden ser ide­n­ti­fi­ca­dos y reparados desde el principio. Te­c­no­lo­gías de la web 2.0 como AJAX pueden ser im­ple­me­n­ta­das con tan solo unas pocas líneas de código. Adi­cio­na­l­me­n­te, Ruby y el framework Rails cuentan con una enorme y creciente comunidad, así como con una gran variedad de ex­te­n­sio­nes.

La in­no­va­do­ra filosofía de Rails, que consiste en buscar la mayor si­m­pli­fi­ca­ción posible para el de­sa­rro­lla­dor, im­ple­me­n­ta­da desde un principio por Matsumoto con ca­ra­c­te­rí­s­ti­cas como el sistema sca­f­fo­l­di­ng, las co­n­ve­n­cio­nes fijas o la es­tru­c­tu­ra MVC, ha servido de in­s­pi­ra­ción para muchos otros fra­me­wo­r­ks. Así, este enfoque es re­co­no­ci­ble en fra­me­wo­r­ks PHP, como por ejemplo Symfony, CakePHP y en Zend Framework.

¿A quién está destinado RoR?

Ruby on Rails ofrece todo lo que un de­sa­rro­lla­dor necesita para crear apli­ca­cio­nes web modernas: es­tru­c­tu­ras primarias para la rea­li­za­ción de la interfaz, una conexión fácil de co­n­fi­gu­rar para una base de datos SQL y la capacidad de utilizar te­c­no­lo­gías web como AJAX. Pri­n­ci­pios claros como “Don’t repeat yourself” y “Co­n­ve­n­tion over co­n­fi­gu­ra­tion” pro­po­r­cio­nan las bases de un código limpio, fá­ci­l­me­n­te manejable y adaptable que puede ser escrito rá­pi­da­me­n­te. Además, también permite realizar tus propias co­n­fi­gu­ra­cio­nes, pues Ruby está diseñado para ofrecer al pro­gra­ma­dor la libertad que necesita. Así, este framework es apto para pri­n­ci­pia­n­tes y pro­gra­ma­do­res ex­pe­ri­me­n­ta­dos que han trabajado hasta la fecha con otros lenguajes de script, aunque, en algunos casos, puede ser necesaria una mayor inversión de tiempo al comienzo. Uno de los puntos más fuertes del framework Ruby es la forma en que el sistema de scoffing facilita la creación de pro­to­ti­pos pla­ni­fi­ca­dos para proyectos web en muy poco tiempo. El entorno de prueba integrado te permite revisar tu apli­ca­ción durante la fase de de­sa­rro­llo en busca de posibles errores. Ruby on Rails está equipado, incluso, para cubrir las ne­ce­si­da­des de apli­ca­cio­nes complejas. Con la ayuda de las llamadas ex­te­n­sio­nes RubyGems, en las que se incluye el mismo framework, es posible añadir fá­ci­l­me­n­te las in­te­r­fa­ces, bi­blio­te­cas y ca­ra­c­te­rí­s­ti­cas fu­n­cio­na­les y visuales ne­ce­sa­rias. Debido a que Ruby y RoR están sujetos a la licencia BSD, deberás contar úni­ca­me­n­te con los costes ne­ce­sa­rios para el alo­ja­mie­n­to de tu proyecto web. En ningún momento debes asumir que no necesitas ningún tipo de co­no­ci­mie­n­tos sobre pro­gra­ma­ción para im­ple­me­n­tar Ruby on Rails en tu proyecto. Este lenguaje no se encarga co­m­ple­ta­me­n­te de la totalidad del trabajo, como lo presupone la broma que me­n­cio­na­mos an­te­rio­r­me­n­te. En términos de velocidad, quienes de­sa­rro­llen apli­ca­cio­nes con RoR no podrán ma­n­te­ne­r­se al día con sus pri­n­ci­pa­les co­m­pe­ti­do­res. El código solo se ejecutará cuando los usuarios accedan al re­s­pe­c­ti­vo contenido, por lo que la gestión de las so­li­ci­tu­des entrantes lleva, ló­gi­ca­me­n­te, más tiempo que la de las líneas de código pre­via­me­n­te co­m­pi­la­das. Por último, recuerda que deberás pre­s­ci­n­dir del framework Rails si deseas organizar tu apli­ca­ción con CMS como Drupal, Joomla o WordPress. Estos últimos, así como otras tantas pla­ta­fo­r­mas, se basan en PHP. Sin embargo, ya existen di­fe­re­n­tes gestores de co­n­te­ni­dos basados en Ruby on Rails, tales como Alchemy CMS. Las pre­vi­sio­nes acerca de la difusión de RoR y de la po­si­bi­li­dad de poner en peligro el po­si­cio­na­mie­n­to de líderes del mercado como PHP, Java y Phyton son difíciles de realizar. No obstante, las ventajas y la creciente po­pu­la­ri­dad del framework Ruby hablan por sí solos.

Ir al menú principal