b'\n_START_ARTICLE_\nRuby on Rails\n_START_SECTION_\nFilosof\xc3\xada\n_START_PARAGRAPH_\nLos principios fundamentales de Ruby on Rails incluyen No te repitas (del ingl\xc3\xa9s Don\'t repeat yourself, DRY) y Convenci\xc3\xb3n sobre Configuraci\xc3\xb3n._NEWLINE_No te repitas significa que las definiciones deber\xc3\xadan hacerse una sola vez. Dado que Ruby on Rails es un framework de pila completa, los componentes est\xc3\xa1n integrados de manera que no hace falta establecer puentes entre ellos. Por ejemplo, en ActiveRecord, las definiciones de las clases no necesitan especificar los nombres de las columnas; Ruby puede averiguarlos a partir de la propia base de datos, de forma que definirlos tanto en el c\xc3\xb3digo como en el programa ser\xc3\xada redundante._NEWLINE_Convenci\xc3\xb3n sobre configuraci\xc3\xb3n significa que el programador s\xc3\xb3lo necesita definir aquella configuraci\xc3\xb3n que no es convencional. Por ejemplo, si hay una clase User en el modelo, la tabla correspondiente de la base de datos es users(en plural), pero si la tabla no sigue la convenci\xc3\xb3n (por ejemplo blogposts) debe ser especificada manualmente (self.table_name = "blogposts") en el modelo. As\xc3\xad, cuando se dise\xc3\xb1a una aplicaci\xc3\xb3n partiendo de cero sin una base de datos preexistente, el seguir las convenciones de Rails significa usar menos c\xc3\xb3digo (aunque el comportamiento puede ser configurado si el sistema debe ser compatible con un sistema heredado anterior).\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nRuby on Rails fue escrito por David Heinemeier Hansson a partir de su trabajo en Basecamp, una herramienta de gesti\xc3\xb3n de proyectos, por 37signals. Fue liberado al p\xc3\xbablico por primera vez en julio de 2004.\xe2\x80\x8b\n_START_SECTION_\nArquitectura MVC de Rails\n_START_PARAGRAPH_\nLas piezas de la arquitectura Modelo Vista Controlador en Ruby on Rails son las siguientes:\n_START_SECTION_\nVista\n_START_PARAGRAPH_\nEn MVC, es la l\xc3\xb3gica de visualizaci\xc3\xb3n, o c\xc3\xb3mo se muestran los datos de las clases del Controlador. Con frecuencia en las aplicaciones web la vista consiste en una cantidad m\xc3\xadnima de c\xc3\xb3digo incluido en HTML._NEWLINE_Existen en la actualidad muchas maneras de gestionar las vistas. El m\xc3\xa9todo que se emplea en Rails por defecto es usar Ruby Empotrado (archivos.rhtml, desde la versi\xc3\xb3n 2.x en adelante de RoR archivos.html.erb), que son b\xc3\xa1sicamente fragmentos de c\xc3\xb3digo HTML con algo de c\xc3\xb3digo en Ruby, siguiendo una sintaxis similar a JSP. Tambi\xc3\xa9n pueden construirse vistas en HTML y XML con Builder o usando el sistema de plantillas Liquid._NEWLINE_Es necesario escribir un peque\xc3\xb1o fragmento de c\xc3\xb3digo en HTML para cada m\xc3\xa9todo del controlador que necesita mostrar informaci\xc3\xb3n al usuario. El "maquetado" o distribuci\xc3\xb3n de los elementos de la p\xc3\xa1gina se describe separadamente de la acci\xc3\xb3n del controlador y los fragmentos pueden invocarse unos a otros.\n_START_SECTION_\nControlador\n_START_PARAGRAPH_\nEn MVC, las clases del Controlador responden a la interacci\xc3\xb3n del usuario e invocan a la l\xc3\xb3gica de la aplicaci\xc3\xb3n, que a su vez manipula los datos de las clases del Modelo y muestra los resultados usando las Vistas. En las aplicaciones web basadas en MVC, los m\xc3\xa9todos del controlador son invocados por el usuario usando el navegador web. _NEWLINE_La implementaci\xc3\xb3n del Controlador es manejada por el ActionPack de Rails, que contiene la clase ApplicationController. Una aplicaci\xc3\xb3n Rails simplemente hereda de esta clase y define las acciones necesarias como m\xc3\xa9todos, que pueden ser invocados desde la web, por lo general en la forma http://aplicacion/ejemplo/metodo, que invoca a EjemploController#m\xc3\xa9todo, y presenta los datos usando el archivo de plantilla /app/views/ejemplo/m\xc3\xa9todo.html.erb, a no ser que el m\xc3\xa9todo redirija a alg\xc3\xban otro lugar._NEWLINE_Rails tambi\xc3\xa9n proporciona andamiaje, que puede construir r\xc3\xa1pidamente la mayor parte de la l\xc3\xb3gica y vistas necesarias para realizar las operaciones m\xc3\xa1s frecuentes.\n_START_SECTION_\nOtros m\xc3\xb3dulos\n_START_PARAGRAPH_\nAdem\xc3\xa1s, Rails ofrece otros m\xc3\xb3dulos, como Action Mailer (para enviar correo electr\xc3\xb3nico) o Active Resource que proporciona la infraestructura necesaria para crear de manera sencilla recursos REST, algo por lo que apuesta claramente Rails en sus \xc3\xbaltimas versiones desplazando as\xc3\xad a otros modelos como SOAP y XML-RPC a los que se les daba soporte en versiones anteriores mediante Action Web Service.\n_START_SECTION_\nAjax on Rails\n_START_PARAGRAPH_\nAjax es una t\xc3\xa9cnica que permite usar Javascript y XML para procesar peticiones de un navegador web a un servidor web como procesamiento en segundo plano sin cargar otras p\xc3\xa1ginas web adicionales. Rails proporciona diferentes facilidades que hacen m\xc3\xa1s f\xc3\xa1cil implementar aplicaciones Ajax._NEWLINE_Rails incluye el framework de Javascript jQuery (una serie de herramientas que proporcionan llamadas Ajax y otra funcionalidad habitual en las tareas cliente-servidor) y script.aculo.us, una biblioteca en Javascript con mejoras en la interfaz de usuario (controles avanzados en los formularios, efectos visuales, arrastrar y soltar, etc.).\n_START_SECTION_\nGemas\n_START_PARAGRAPH_\nLas gemas son plugins y/o c\xc3\xb3digos a\xc3\xb1adidos a nuestros proyectos Ruby on Rails, que nos permiten nuevas funcionalidades como nuevos create, nuevas funciones predefinidas (como login de usuarios) o nuevas herramientas para el desarrollo como puedan ser Haml y SASS (la primera es una nueva forma de template basada en html pero m\xc3\xa1s sencilla y potente, y la segunda es igual pero para el caso de las CSS)._NEWLINE_Para encontrar el listado de gemas disponibles puedes ir a RubyForge.\n_START_SECTION_\nSoporte de servidores Web\n_START_PARAGRAPH_\nPara desarrollo y pruebas, se utiliza Mongrel o WEBrick, incluido con Ruby. Para utilizar Rails en servidores en producci\xc3\xb3n se est\xc3\xa1 extendiendo el uso de Passenger, una suerte de mod_rails para Apache desarrollado en 2008 por la empresa holandesa Phusion. Otras opciones para producci\xc3\xb3n son Nginx, Mongrel, Apache, Lighttpd con FastCGI o alguna combinaci\xc3\xb3n de ambos(por ejemplo utilizando Apache como proxy para los procesos Mongrel). Sobre Apache, mod ruby puede mejorar considerablemente el rendimiento, aunque su uso no se recomienda porque no es seguro utilizar m\xc3\xbaltiples aplicaciones RoR sobre Apache.\n_START_SECTION_\nSoporte de Bases de Datos\n_START_PARAGRAPH_\nDada que la arquitectura Rails favorece el uso de bases de datos se recomienda usar un SGBDR para almacenamiento de datos. Rails soporta la biblioteca SQLite por defecto. El acceso a la base de datos es totalmente abstracto desde el punto de vista del programador, es decir que es agn\xc3\xb3stico a la base de datos, y Rails gestiona los accesos a la base de datos autom\xc3\xa1ticamente (aunque, si se necesita, se pueden hacer consultas directas en SQL) Rails intenta mantener la neutralidad con respecto a la base de datos, la portabilidad de la aplicaci\xc3\xb3n a diferentes sistemas de base de datos y la reutilizaci\xc3\xb3n de bases de datos preexistentes. Sin embargo, debido a la diferente naturaleza y prestaciones de los SGBDRs el framework no puede garantizar la compatibilidad completa. Se soportan diferentes SGBDRs, incluyendo MySQL, PostgreSQL, SQLite, IBM DB2 y Oracle.'