Las novedades de Ruby on Rails 4.2

25 de agosto de 2014

Ruby on Rails es el framework más famoso del mundo para desarrollar aplicaciones web. En este artículo te contamos las tres principales novedades de la nueva versión 4.2 que está a punto de publicarse:

  • Acceso a la consola de comandos vía web para simplificar las tareas de depuración.
  • Un nuevo framework llamado Active Job para normalizar los sistemas de colas de mensajes.
  • Mejoras espectaculares de rendimiento en el Active Record.

Estas novedades son importantes incluso para los programadores de otros frameworks, ya que debido a la influencia de Rails, muchos de los otros frameworks acabarán incorporando funcionalidades parecidas.

La consola web

La consola de comandos es una herramienta imprescindible para cualquier programador Rails. No obstante, en algunas ocasiones no es posible utilizarla, como por ejemplo con servicios de hosting muy baratos/malos o con conexiones a Internet que bloquean el acceso SSH al servidor.

Por este motivo Rails 4.2.0 incluye una consola de comandos totalmente funcional que puedes utilizar directamente desde el propio navegador accediento a la ruta /console:

Consola de comandos de Rails accesible vía web

Consola de comandos de Rails accesible vía web

Una de las situaciones en la que esta consola puede ser más útil es cuando se produce un error en la aplicación. Y precisamente por eso, Ruby on Rails 4.2 incluirá por defecto esta consola en todas las páginas de excepciones.

Consola de comandos en las páginas de excepciones de Rails

Consola de comandos en las páginas de excepciones de Rails

Si durante el desarrollo de la aplicación quieres acceder a la consola en tus propias vistas, solamente debes añadir <%= console %> en cualquier punto de la vista y la consola se mostrará automáticamente.

Para evitar problemas de seguridad, puedes configurar tanto la ruta en la que está accesible la consola como la lista de direcciones IP desde las que se puede acceder a ella:

class Application < Rails::Application
  config.web_console.default_mount_path = '/debug'
  config.web_console.whitelisted_ips    = %w( 127.0.0.1 192.168.0.100 )
end

Colas de mensajes y el método #deliver_later

La característica más importante de Rails 4.2 desde el punto de vista técnico es la introducción de un nuevo framework llamado Active Job. Se trata de una capa que se sitúa por encima de los sistemas de colas de mensajes como Resque, Sidekiq y Delayed Job para normalizar el uso de todos estos sistemas. Así podrás cambiar tu sistema de colas sin necesidad de realizar cambios en tu código.

Además, como todas las aplicaciones Rails 4.2 ya incluyen un sistema de colas muy sencillo, este nuevo framework ya se utiliza en algunos métodos internos de Rails. Así por ejemplo, el nuevo método #deliver_later permite enviar los emails de manera asíncrona para no ralentizar la ejecución de tus controladores o tus modelos.

Además, Rails también ha decidido incluir la librería GlobalID que permite crear URI que identifican de manera única cada instancia de cada modelo. Gracias a esta librería ya no tienes que serializar y deserializar a mano el contenido de los Active Records, sino que puedes indicar simplemente el id del registro que quieres pasar a la cola de mensajes y la serialización/deserialización será automática.

El proyecto Adequate Record

El Active Record es, con diferencia, la característica más criticada de Rails debido a su bajo rendimiento. Por eso un programador llamado Aaron Patterson decidió crear un proyecto llamado Adequate Record para mejorar su rendimiento tanto como sea posible.

Gracias a su trabajo y a las optimizaciones que ha introducido, muchas de las consultas más comunes en aplicaciones Rails ahora son el doble de rápidas. Un buen comienzo para un proyecto que no ha hecho más que empezar.

Otros cambios

  • Se han añadido add_foreign_key y remove_foreign_key para poder añadir y eliminar claves foráneas durante las migraciones.
  • Se ha añadido un namespace llamado x para poder definir opciones de configuración propias. Ejemplo: config.x.pasarela_pago.reintentos = 3
  • El hash de las plantillas se incluye como parte del valor del ETag, por lo que la caché se invalida automáticamente al modificar las plantillas.

Referencias