¿Por qué rieles?

Su elección, al aprender un nuevo marco, es increíblemente importante. Se requieren innumerables horas y esfuerzos para llegar a ser competentes y aprender todas las mejores prácticas, incluso para desarrolladores con experiencia..

Es por eso que es necesario comprender las peculiaridades de un marco lo antes posible para determinar si es la solución correcta para el problema que está tratando de resolver. En este artículo, cubriré muchas de las áreas clave del marco de Ruby on Rails, y por qué creo que es una excelente opción para los desarrolladores web.


Algo de historia

Ruby on Rails se extrajo de la aplicación de gestión de proyectos, Basecamp.

Ruby on Rails fue de código abierto en 2004, por David Heinemeier Hannson, luego de ser extraído de la aplicación de gestión de proyectos, Basecamp..

Se basa en el lenguaje de programación Ruby, y la versión estable actual es 3.2, con 4.0 a la vuelta de la esquina!

RoR es una pila de aplicaciones web completa; a partir de la versión 3.1, también incluye instalaciones y bibliotecas para administrar el código del frontend, admitiendo Sass y CoffeeScript de manera inmediata, sin necesidad de herramientas externas para administrar el proceso de compilación. Flujo de trabajo opinado es el nombre del juego con Rails.

Para el desarrollo, incorpora su propio servidor web, de modo que no necesita instalar software adicional aparte de una instalación de Ruby que funcione..


Por que aprender?

Existen innumerables razones para aprender Rails, desde técnicas hasta negocios y productividad. Abordaremos cada uno por uno..

Tecnología

Ruby ha sido diseñado para ser una "alegría de usar".

Como su nombre lo indica, Rails está basado en el lenguaje Ruby. Ruby, inventado en 1993 y lanzado por primera vez en 1995 por Yukihiro Matsumoto (ampliamente conocido simplemente como "Matz"), es un lenguaje interpretado orientado a objetos que presenta una sintaxis muy inspirada en Perl y Lisp. Desde su inicio, Ruby ha sido diseñado para ser una "alegría de usar", lo que significa un fuerte enfoque en la legibilidad y la elegancia..

Al ser un lenguaje de nivel superior, Ruby es extremadamente potente y versátil, a la vez que mantiene un buen equilibrio de claridad y rendimiento (teniendo en cuenta que sigue siendo un lenguaje dinámico interpretado).

El intérprete Ruby original (el intérprete Ruby de Matz, acortado como MRI) está escrito en C, pero no es el único disponible en la actualidad (un par de alternativas notables son JRuby, que se ejecuta en la parte superior de la JVM y Rubinius).

Ruby presenta varias bibliotecas con su núcleo, incluida una muy poderosa unidad de prueba, llamada Minitest (antes de Ruby 1.9, Ruby usaba TestUnit).

Rails es una forma popular de involucrarse con Ruby, por lo que hoy en día no es raro encontrar personas (incluyéndome a mí) cuya primera introducción a Ruby fue a través de Rails.

Aprende los fundamentos de Ruby con Tuts + Premium..

Estructura

Rails tiene una opinión muy firme cuando se trata de decisiones arquitectónicas.

Rails es un marco MVC independiente de la base de datos que elige la convención sobre la configuración, lo que significa que tiene una opinión muy estricta cuando se trata de decisiones arquitectónicas, convenciones de nomenclatura, rutas y patrones..

Con más detalle:

  • MVC significa que sigue el paradigma Modelo-Vista-Controlador, para que pueda separar claramente las preocupaciones al desarrollar una aplicación. Esto permite que su lógica de negocios principal esté en un solo lugar, evitando la duplicación y ayudando con el mantenimiento.

  • Sigue un enfoque REST, orientado a los recursos, lo que significa que lo alienta a pensar en la lógica de su negocio desde el punto de vista de los datos, exponiendo los recursos a los puntos finales que realizan acciones de CRUD. Por ejemplo, el inicio de sesión en un sitio puede verse como 'crear una sesión'; cerrar sesión como 'destruyendo una sesión'. Este enfoque requiere un tiempo para acostumbrarse, pero una vez que ha adoptado esa mentalidad, ayuda a mantener sus interfaces consistentes y predecibles por otros desarrolladores. Las aplicaciones de Rails tienden a girar en torno a los modelos, que gestionan la persistencia de los datos..

  • Utiliza Bundler como una herramienta de gestión de dependencias, aprovechando el poder de la comunidad Rubygems. Esto garantiza un enfoque coherente para agregar funcionalidad de terceros a una aplicación, con un formato explícito que detalla qué bibliotecas necesitamos y qué versiones, incluida la resolución de dependencias anidadas.

  • Puede admitir una amplia gama de bases de datos, con SQLite como predeterminado (bueno para el desarrollo) y MysQL y PostgreSQL como las primeras opciones para la producción. MongoDB también se puede integrar con el mínimo esfuerzo..

  • Convención significa que los nombres, las rutas y los patrones suelen ser predecibles y compartidos entre otros desarrolladores de Rails. Esto garantiza una curva de aprendizaje más sencilla, centrada en la lógica empresarial de la aplicación, un mantenimiento más sencillo y menos documentación..

  • Es fácil de probar, con herramientas que se integran con el marco para la prueba e integración de unidades (con soporte de JavaScript) también. Además, la comunidad de Ruby, en sí misma, aboga fuertemente por el desarrollo guiado por pruebas, por lo que un buen desarrollador de Rails probablemente tenga bastante experiencia en pruebas.

  • Una aplicación de Rails puede implementarse fácilmente en infraestructuras en la nube, como Heroku, o directamente en servidores privados (funciona muy bien en Ubuntu Linux, por ejemplo).

Características principales

Aquí hay un resumen básico de lo que Rails puede hacer fuera de la caja, junto con algunos ejemplos de código. Tenga en cuenta que, incluso si nunca ha trabajado con Rails antes o no conoce a Ruby, esto no debería impedirle entenderlos, ya que son bastante legibles..

  • Soporte para la definición del modelo de datos a través de migraciones, es decir, instrucciones independientes de base de datos repetibles y reversibles, que manipulan la estructura de la base de datos. Considere la siguiente migración:

    clase CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :title t.date :start_date t.date :end_date t.boolean :live, :default => falso t.timestamps end end end

    Esta migración crea una eventos tabla, con algunos datos básicos, como un título, y utiliza tipos de datos específicos que se asignan a tipos de columna específicos en la base de datos subyacente. Por ejemplo, por defecto, cuerda utiliza un VARCHAR (255) Columna, si usa MySQL. Esta migración se puede escribir manualmente desde cero, o generarse desde la línea de comandos y luego editarse antes de ejecutarse.

  • Interfaz de modelo agnóstico de base de datos para acciones CRUD. Aquí hay algunos ejemplos, dado un Noticias modelo:

    news = News.new (título: 'Sample news') # => devuelve una instancia de noticias, no se guarda en la base de datos news.save # => ejecuta una consulta de inserción y actualiza la instancia con el id devuelto de la base de datos news.title = 'Noticias de ejemplo actualizadas' # => establece el título al nuevo valor, sin guardar en la base de datos news.save # => ejecuta una consulta de actualización para ese elemento news.destroy # => ejecuta una consulta de eliminación para ese elemento

    Además, Rails proporciona una interfaz simple para realizar consultas de selección, incluidas las uniones entre modelos.

    News.where (publicado: verdadero) .order ('created_at DESC'). Limit (5) # => produce 'SELECT * de las noticias donde publicado = 1 orden por created_at DESC limit 5'
  • Soporte para validaciones; un Evento modelo siempre puede requerir la presencia de un título único. En ese caso, es posible expresar claramente estos requisitos en el Evento clase:

    evento de clase < ActiveRecord::Base validates :title, :presence => verdadero,: unicidad => verdadero fin

    Esta funcionalidad garantiza que no se guarde ningún registro no válido en la base de datos y también proporciona todos los enlaces necesarios para mostrar los errores de validación al usuario (por ejemplo, en un formulario).

  • Sesión y cookies con simples ayudantes para establecer valores, obtenerlos y eliminarlos, con firma transparente..

  • Protección contra la falsificación de formularios, de modo que cualquier formulario que genere a través de Rails se firme automáticamente con un token que garantice su genuino.

  • La política de protección agresiva de XSS está habilitada de forma predeterminada, de modo que cualquier elemento de formulario que utilice esté protegido de forma predeterminada, a menos que lo incluya en la lista blanca explícita (¡tenga cuidado al hacerlo!).

  • Gestión simple para OBTENER y ENVIAR Datos, accesibles a través de un simple hash disponible en cada acción del controlador.

  • Enlaces simples para conectar controladores, modelos y vistas, con reglas claras y convencionales que simplifican la administración de archivos y el código. Por ejemplo, considere el siguiente controlador que es responsable de representar una página de lista de noticias en http://example.com/news:

    clase NewsController < ApplicationController def index end end

    Incluso sin escribir ningún código para definir qué índice hace, Rails proporciona un comportamiento predeterminado, que es renderizar el app / views / news / index.html.erb ver. Esto reduce la necesidad de código repetitivo, ya que, la mayoría de las veces, solo es necesario anular el comportamiento, cuando no es convencional.

  • Integración con servicios externos; Rails ofrece un rico ecosistema de aplicaciones que puede usar para monitorear, mantener y mejorar su aplicación (algunas de ellas funcionan también con otros marcos). New Relic ayuda a monitorear el rendimiento, Airbrake Bug Tracker recopila excepciones para notificar al equipo de desarrollo, Code Climate analiza su base de código en cuanto a calidad, complejidad y duplicación, Tddium y TravisCI pueden ejecutar su conjunto de pruebas de forma remota contra diferentes versiones de Ruby.

  • Como se señaló anteriormente, Rails también ofrece un entorno integrado para trabajar con Coffeescript y Sass, con compilación transparente en desarrollo y preprocesamiento y almacenamiento en caché para la implementación, de modo que su aplicación de producción sirva archivos minificados únicos con una firma en el nombre del archivo. De esta manera, puede estar absolutamente seguro de que cualquier navegador siempre cargará y almacenará en caché la última versión del archivo.


Valor de negocio

¿Alguna vez te has preguntado por qué Rails es la primera opción de muchas nuevas empresas web? Hay dos razones principales:

  • Le permite trabajar en funciones con un mínimo de repetición, eliminando una gran cantidad de trabajo no relacionado con el negocio del proceso de desarrollo. Esto se traduce en una mayor velocidad en el desarrollo y la implementación de nuevas funciones, lo cual es clave para comprender si el producto es sólido..

  • La estructura de los rieles facilita el cambio. Esto es cierto para muchos frameworks MVC, aunque Rails es particularmente bueno en la reestructuración de su flujo de aplicaciones, reutilizando componentes de una manera simple.

Es importante recordar que, con frecuencia, el tiempo de desarrollo es más costoso que un servidor adicional.

Siempre hay una conversación en curso sobre el rendimiento de Rails, y cómo puede convertirse en un cuello de botella cuando se obtienen miles de visitas por minuto. El problema es que llegar a ese nivel de tráfico requiere un gran esfuerzo. La verdad es que: 9 de cada 10 veces, la escalabilidad es un problema que muchas empresas nunca deben enfrentar. Para ellos, la capacidad de realizar cambios, facilidad de mantenimiento y previsibilidad son mucho más valiosas..

Además, es importante recordar que, con frecuencia, el tiempo de desarrollo es más costoso que un servidor adicional. Un marco como Rails es a menudo preferido porque, incluso si necesita un hardware más potente, aún es rentable en otras áreas.

Esto no significa que no deba preocuparse por el rendimiento de su código o preocuparse por temas como el almacenamiento en caché y la optimización de consultas. En cambio, significa tener en cuenta todo el espectro de cambios de hardware y software que puede realizar; a veces, es sensato posponer una porción de trabajo centrada en el rendimiento y temporalmente tener un hardware más potente para continuar trabajando en características importantes.


Extendiendo el Marco

Los rieles se pueden ampliar fácilmente con una amplia variedad de bibliotecas externas, distribuidas a través de Rubygems. La mayoría de las veces, cualquier característica que necesites construir ya se ofrece a través de una gema. Ahora, esto no significa que agregar gemas sea la solución perfecta; Cada dependencia de terceros que agregue a una aplicación se convierte en un factor de riesgo..

A veces, es preferible rodar su propia versión con código personalizado.

Dicho esto, no deberías reinventar la rueda. Muchas aplicaciones de Rails usan las mismas gemas para proporcionar características específicas; Esto puede ser visto como una ventaja. Recuerde: el uso amplio se traduce en pruebas amplias, por lo que se considera una práctica segura usar ciertas gemas bien conocidas para realizar tareas clave. Aquí están algunos ejemplos:

  • Ideado, para registro de usuario, login y gestión.
  • Forma simple, para la generación de marcado de forma fácil y personalizable.
  • Kaminari, para la paginación
  • ActiveAdmin, para páginas de administración rápida

Esta lista podría continuar fácilmente, pero el punto es que Rails aprovecha la modularidad de un enfoque basado en Rubygems y puede acelerar en gran medida el desarrollo, al concentrarse en las características de compilación que son importantes para el producto en el que está trabajando, en lugar de en un plano.


Por qué me gusta trabajar con rieles

Puedo concentrarme en lo que importa para los clientes sin comprometer la buena calidad del código.

Hace aproximadamente dos años, estaba trabajando en una función de marketing / gestión de productos (haciendo el desarrollo web como un hobby); eso significaba enfocarse en las características del producto, su valor comercial y el costo asociado con su desarrollo. Cuando decidí cambiar de carrera, Rails 3.0 acababa de ser lanzado. Pasé una tarde viendo videos y leyendo tutoriales. Rápidamente decidí que Rails era en lo que quería enfocar mis esfuerzos en.

La razón, y esto se superpone a lo que ya hemos discutido, es que pude ver un enfoque práctico en el marco, un objetivo claro para ser productivo y centrarme en el producto y su desarrollo. Podría hacer las cosas en poco tiempo. Después de unos meses de autoaprendizaje intensivo a través de varios tutoriales web y algunas aplicaciones de muestra, solicité mi trabajo actual como desarrollador de Rails en New Bamboo.

Disfruto trabajando con Rails todos los días, porque puedo concentrarme en lo que importa para los clientes sin comprometer la buena calidad del código. Para mí, es el punto de partida perfecto para la mayoría de las aplicaciones basadas en web..

No resuelve todos los problemas que encontrará al crear grandes aplicaciones web. Hay ocasiones en las que se ve claramente que Rails no es adecuado para un tipo específico de servicio, pero es el momento de dividir la arquitectura en aplicaciones más pequeñas.


Conclusión

Rails es un marco poderoso que puede ayudarlo a ser más productivo y seguro al trabajar en proyectos complejos. Esto es posible, gracias a sus fuertes convenciones y sólida estructura. Las grandes empresas, como 37 Signals, Pivotal Labs, Groupon (o incluso Twitter en los viejos tiempos) han elegido a Rails como la arquitectura base para sus aplicaciones principales. Hay una razón por la cual!

Listo para empezar a montar Ruby on Rails?