Ruby on Rails

**Ruby on Rails** é un framework de aplicacións web libre. Pretente incrementar a velocidade e facer máis sinxelo o desenvolvemento de sitios web, e ofrece un framework de código esqueleto (andamiaxe). Normalmente chamado como **Rails**, ou **RoR**, Ruby on Rails é un proxecto software libre escrito en Ruby, segundo o paradigma de deseño MVC Modelo-Vista-Controlador. A linguaxe de programación Ruby permite a metaprogramación, do cal Rails fai uso, o que resulta nunha sintaxe que moitos usuarios encontran moi lexible. Rails distribúese a través de RubyGems, que é o formato oficial de paquete e canal de distribución de librerías e aplicacións Ruby.

## Filosofía 
Os principios fundamentais de Ruby on Rails inclúen *Convención sobre configuración* (CoC) e *Non te repitas* (DRY).

"Convención sobre configuración" significa que o desenvolvedor só precisa especificar aspectos non convencionais da aplicación. Por exemplo, se hai unha clase *Venda* no modelo, a táboa correspondente na base de datos é chamado **vendas** por defecto.

"Non te repitas" refírese á información disposta nun lugar único, e non ambiguo. Por exemplo, ó empregar ActiveRecord, o desenvolvedor non precisa especificar os nomes das columnas da base de datos na definición da clase. No canto, Ruby pode recoller a información dende a base de datos.

## Historia 
[dereita|170px|miniatura|[David Heinemeier Hansson]]
Ruby on Rails foi escrito por David Heinemeier Hansson a partir do seu traballo en Basecamp, unha ferramenta de xestión de proxectos por 37signals. Foi liberado ó público por primeira vez en xullo de 2004 http://dev.mysql.com/tech-resources/interviews/david-heinemeier-hansson-rails.html .

* Ruby on Rails 1.0 foi publicado o 13 de decembro de 2005.
* Ruby on Rails 1.1 foi publicado o 28 de marzo de 2006.
* Ruby on Rails 1.2 foi publicado o 18 de xaneiro de 2007.
* Ruby on Rails 2.0 foi publicado o 7 de decembro de 2007.

## Significado 
Ruby on Rails lidera a seguinte xeración de frameworks de aplicacións web, con características moi populares que son agora consideradas como estándares, entre os que están scaffolding, mapeamento obxecto-relacional e instalación simple. Outros proxectos, como, Catalyst, Django e TurboGears ségueno.
## Resumo tecnolóxico 
Do mesmo xeito que moitos frameworks web contemporáneos, Rails utiliza a arquitectura modelo-vista-controlador (*Model-View-Controller* -MVC-) para organizar a programación de aplicacións.

Rails proporciona "ó comezar" ferramentas que poden construír rapidamente a maioría dos modelos e vistas que se precisan para a base das páxinas web. Inclúe tamén outras ferramentas de axuda que veñen instaladas con Rails, como o servidor web WEBrick e o sistema de construción Rake.

Rails fai un uso significativo de librarías JavaScript Prototype e Script.aculo.us para Ajax e na súa interface de usuario.

Para os servizos web Rails inicialmente soportaba SOAP; pero finalmente foi substituída por servizos web RESTful. A recomendada estrutura de programación baseada en REST cambia drasticamente na versión 1.2.

## Arquitectura MVC de Rails 
Ruby on Rails divídese en varios paquetes, chamados Active Record, Active Resource, Action Pack, Active Support e Action Mailer (anteriormente á versión 2.0, Rails tamén incluía o paquete Action Web Service que agora foi substituído por Active Resource). Ademais dos paquetes estándar, os desenvolvedores poden facer plugins para estender as funcionalidades dos paquetes base.

As pezas da arquitectura Modelo Vista Controlador en Ruby on Rails son as seguintes:

### Modelo 
Nas aplicacións web orientadas a obxectos sobre bases de datos, o modelo consiste nas clases que representan as táboas da base de datos.

En Ruby on Rails, as clases do modelo son xestionadas por ActiveRecord. Polo xeral, o único que ten que facer o programador é herdar da clase `ActiveRecord::Base`, e o programa coñecerá automaticamente que táboa empregar e as columnas que ten.

As definicións das clases tamén detallan as relacións entre clases con sentenzas de mapeamento obxecto-relacional. Por exemplo, se a clase `Imagen` ten unha definición `has_many :comentarios`, e existe unha instancia de `Imagen` chamada `a`, entón `a.comentarios` devolverá un array con tódolos obxectos `Comentario` cuxa columna `imagen_id` (na táboa comentarios) sexa igual a `a.id`.

As rutinas de validación de datos (p.e. `validates_uniqueness_of :checksum`) e as rutinas relacionadas coa actualización (p.e. `after_destroy :borrar_archivo`, `before_update :actualizar_detalles`) tamén se especifican e implementan na clase do modelo.

O modelo representa:
* As táboas da base de datos.
* Migracións (expresan cambios nas BD).
* Observadores

### Vista 
En MVC, *Vista* é a lóxica de visualización, ou como se mostran os datos das clases do Controlador. Con frecuencia nas aplicacións web a vista consiste nunha cantidade mínima de código incluído en HTML.

Existen na actualidade moitas maneiras de xestionar as vistas. O método que se emprega en Rails por defecto é empregar Ruby Embebido (arquivos .rhtml), que son basicamente fragmentos de código HTML con algo de código en Ruby, seguindo unha sintaxe similar a JSP. Tamén poden construírse vistas en HTML e XML con Builder ou empregando o sistema de modelos Liquid.

É preciso escribir un pequeno fragmento de código en HTML para cada método do controlador que precisa mostrar información ó usuario. A "maquetaxe" ou distribución dos elementos da páxina descríbense separadamente da acción do controlador e os fragmentos poden invocarse uns a outros.

### Controlador 
En MVC, as clases do *Controlador* responden á interacción do usuario e invocan a lóxica da aplicación, que á súa vez manipula os datos das clases do *Modelo* e mostra os resultados empregando as *Vistas*. Nas aplicacións web baseadas en MVC, os métodos do *controlador* son invocados polo usuario empregando o navegador web.

A introdución do *Controlador* é manexada polo ActionPack de Rails, que contén a clase `ApplicationController`. Unha aplicación Rails simplemente herda desta clase e define as accións necesarias como métodos, que poden ser invocados dende a web, polo xeneral na forma `http://aplicacion/exemplo/metodo`, que invoca a `ExemploController#metodo`, e presenta os datos empregando o arquivo de modelo `/app/views/exemplo/metodo.rhtml`, a non ser que o método redirixa a algún outro lugar.

Rails tamén proporciona ferramentas que pode construír rapidamente a maior parte da lóxica e vistas necesarias para realizar as operacións máis frecuentes.

## Outros módulos 
Ademais, Rails ofrece outros módulos, como **Action Mailer** (para enviar correo electrónico) e **Action Web Service** para dar soporte a SOAP e XML-RPC.

### Ajax on Rails 
Ajax é unha técnica que permite empregar Javascript e XML ou JSON para procesar peticións dun navegador web a un servidor web como procesamento en segundo plano sen cargar outras partes da páxina web adicionais. Rails proporciona diferentes facilidades que fan máis fácil poñer en funcionamento aplicacións Ajax.

Rails é anfitrión tanto do framework Prototype en Javascript (unha serie de ferramentas que proporcionan chamadas Ajax e outra funcionalidade habitual nas tarefas cliente-servidor) como de script.aculo.us, unha libraría en Javascript con melloras na interface de usuario (controis avanzados nos formularios, efectos visuais, arrastrar e soltar).

## Soporte de servidores Web 
Para desenvolvemento e probas, empregase o servidor web lixeiro WEBrick, incluído con Ruby. Para o seu uso en produción emprégase Apache ou Lighttpd con FastCGI. Sobre Apache, mod ruby pode mellorar considerablemente o rendemento, aínda que o seu uso non se recomenda porque non é seguro empregar múltiples aplicacións RoR sobre Apache. https://web.archive.org/web/20060506010228/http://wiki.rubyonrails.com/rails/pages/mod_ruby A mellor alternativa, sen dúbida, é empregar a libraría/servidor web Mongrel cun balanceador de carga coma Pound; deste xeito correndo varias instancias de Mongrel alcánzanse uns niveis de escalabilidade e de carga aceptables.

## Soporte de bases de datos 
Dado que a arquitectura Rails favorece o uso de bases de datos, recoméndase usar un SXBD para almacenamento de datos. Rails soporta a libraría SQLite se non é posible empregar unha base de datos. O acceso á base de datos é totalmente abstracto dende o punto de vista do programador, e Rails xestiona os accesos á base de datos automaticamente (aínda que, se se necesita, pódese facer consultas directas en SQL). Rails tenta manter a neutralidade con respecto á base de datos, a portabilidade da aplicación a diferentes sistemas de base de datos e a reutilización de bases de datos preexistentes. Porén, por mor da diferente natureza e prestacións dos SXBDs o framework non pode garantir a compatibilidade completa. Sopórtanse diferentes SXBDs, incluíndo MySQL, PostgreSQL, SQLite, IBM DB2, Oracle e Microsoft SQL Server.

## Marcas 
En marzo de 2007 David Heinemeier Hansson rexistrou tres aplicacións relacionadas con Rails no USPTO. Estas aplicacións conteñen a frase "RUBY ON RAILS", a palabra "RAILS" e o logo oficial de Rails. Como consecuencia, no verán de 2007 Hansson denegou a Apress o permiso de empregar o logo de Rails na portada do novo libro escrito por membros autorizados da comunidade. O episodio provocou unha protesta política na comunidade Rails. En resposta a estas críticas, Hansson fixo as seguintes declaracións:*Só autoricei o suo promocional de Rails ós produtos en que estea envolto directamente, como libros que foron parte do proceso de desenvolvemento ou para conferencias nas que eu participe.*

## Proxectos que empregan Rails 
* La coctelera: comunidade de blogs española.
* Blurb.com: publicador de libros persoal.
* Twitter: servizo de micro-blogging.
* yellowpages.com: directorio telefónico dos Estados Unidos.

## Notas 
## Véxase tamén 
### Ligazóns externas 
* rubyonrails.org
* RailsLodge plugin directory
* Ruby Forge