Ruby on Rails vs. Django

En vaporbase podemos encontrar una comparativa de 45 páginas entre Ruby on Rails y Django, los frameworks de desarrollo web más conocidos para Ruby y Python respectivamente. He resumido las conclusiones del autor, aunque no comparto varios puntos, para aquellos demasiado vagos para leerlo entero.

Comunidad

Ruby on Rails es más popular, debido entre otras cosas a que es open source desde un año antes que Django. Sin embargo, Django está ganando bastante popularidad últimamente. 4 puntos (sobre 5) para Ruby on Rails y 3 para Django.

Lenguaje de programación

Python es mucho más utilizado que Ruby. En occidente Ruby es conocido básicamente debido a Ruby on Rails, mientras que sólo en la web de setuptools se listan más de 10.000 librerías para Python. Según el autor programar en Ruby es más divertido, por lo que concluye dando a ambos 4 puntos.

Concepto del framework

Ambos siguen el patrón MVC (Modelo – Vista – Controlador). RoR tiende a hacer las cosas automágicamente, en Django se prefiere la transparencia en lugar del paternalismo. 4 puntos para Django y 3 para Ruby on Rails.

Instalación / estructura de directorios

Ambos son sencillos de instalar. Ruby on Rails fuerza a utilizar una estructura de directorios predeterminada que no tiene porque funcionar en todos los casos. Django es más flexible. 5 puntos para Django y 4 para Ruby on Rails.

Bases de datos y modelo

Ambos usan ORM, al estilo de, por ejemplo, Hibernate (correspondencias entre clases y tablas de una base de datos relacional). Mientras que en RoR se crea primero la base de datos y la clase modelo inspecciona la tabla para determinar los atributos, en Django se define primero la clase modelo y a partir de esta se crea la tabla o tablas en la base de datos.

Ruby on Rails proporciona alguna herramienta adicional interesante, como la migración del esquema de una base de datos automaticamente usando el comando migration que le sitúa con 4 puntos frente a los 3 de Django.

Redirección y controladores

Las correspondencias entre la URL solicitada y la clase controladora que tratará la petición se listan en ambos casos en archivos de configuración. Django permite utilizar expresiones regulares para definir las URLs. 4 puntos para Django, 3 para Ruby on Rails.

En lo que respecta al desarrollo de los controladores en sí, no existen diferencias significativas que no se traten en otros apartados, por lo que ambos obtienen 3 puntos en este apartado.

Plantillas, formularios

Sin diferencias substanciales. 3 puntos para cada uno en ambos casos.

Administración de los datos y los usuarios

Una de las cosas por las que Django es famoso es por poder generar una interfaz para crear, modificar, borrar y listar items de una clase de objetos del modelo de dominio a partir de la clase. Además también se puede buscar, filtrar y ordenar las listas. El problema es que estas páginas son difíciles de modificar, por lo que si necesitas algo que se salga de lo común tendrás que crear esta interfaz de gestión a mano, como siempre.

Rails permite algo similar a través de plugins, pero la alternativa de Django es algo mejor. La gestión de permisos es muy rudimentaria en ambos casos: 2 puntos para ambos.

De nuevo Django permite administrar usuarios permitiendo crear grupos y posibilitando registrar nuevos usuarios mientras que en Ruby on Rails esta misma funcionalidad se logra a través de plugins. Ambos distan mucho de ser perfectos: 2 puntos.

AJAX

En Ruby on Rails el uso de AJAX está totalmente integrado dentro del framework y encapsulan la funcionalidad de los toolkits prototype y Scrip.aculo.us de forma que se puedan añadir distintos efectos AJAX a las páginas sin necesidad de tocar una sola línea de Javascript.

En Django, por contra, se intenta facilitar el uso de toolkits AJAX, pero no se integra ninguno dentro del framework.

4 puntos para Ruby on Rails, 3 para Django.

Documentación

Ambos cuentan con excelente documentación, aunque la de Ruby on Rails es más abundante dado que actualmente es más conocido. 4 puntos para Ruby on Rails, 3 para Django.

Extensiones

La instalación de plugins en Ruby on Rails es sumamente sencilla, en Django es más manual. Existen muchos más plugins para Ruby on Rails.

4 puntos para Ruby on Rails, 2 para Django.

Ciclo de desarrollo

Ambos cuentan con herramientas de depuración maduras. 3 puntos para ambos.

En Ruby on Rails las baterías de pruebas están más integradas en el ciclo de desarrollo. 4 puntos para Rails, 3 para Django.

Rails facilita más el proceso de despliegue de la aplicación: 4 puntos, frente a los 3 de Django.

Conclusión

Haciendo la media el autor da un 3.18 sobre 5 a Ruby on Rails y un 3.27 a Django en el apartado técnico.

Sin embargo, en lo relacionado con el soporte (comunidad, documentación, extensiones de los usuarios, …) Ruby on Rails se alza como claro vencedor con 3.67 puntos frente a los 2.83 de Django.

En conclusión, las notas finales son de 3.35 para Ruby on Rails y 3.12 para Django.

Esperemos que Django comience a alcanzar la popularidad que se merece y empiecen a cambiar las tornas dentro de poco 😉

Comentarios
  1. Personalmente, hace un año cuando probé rails me decepcionó bastante, quizá debido a las altas expectativas que tenía por tanto bombo que se le daba/da. Me encanta la sintaxis de perl, adoro la simpleza de python, pero desde luego programar en ruby, lo poco que lo usé todo sea dicho, era de todo menos divertido; horrible sería la palabra que (para mi) describiría su sintaxis.

    Cuando me vengan las ganas quería darle a rails una nueva oportunidad, pero creo que tendrá que ser después de probar Django 🙂

    Responder

  2. Muy buen articulo, empece hace unas semanas con Django. Pero me gustaría encontrar más info en castellano.

    Responder

  3. Con django escribes en Python., y tienes toda la potencia de las infinitas librerías de Python para hacer todas las guarradas que desees.
    + 100 puntos 😀

    Responder

  4. @DZPM Pues sí. Precisamente esa es una de las cosas con las que no estoy de acuerdo. Comentar la de librerías útiles que tiene Python y aún así darle la misma nota al lenguaje porque Ruby es más divertido. Que tampoco lo es.

    Responder

  5. No tengo más que alabanzas para Django y honestamente no entiendo la insistencia con este tipo de “competencias”, pero creo que se menosprecia la importancia de la “diversión” en el lenguaje. Por experiencia propia trabajo mucho mejor y más eficientemente cuando la paso bien con las herramientas que uso. El hecho de que hayan miles y miles de librerías en Python es algo abstracto. Voy a necesitar TODAS esas librerías? Cuándo? Debo basar mi desición de framework en el hecho de que, en algún futuro hipotético, necesitaré una librería super extraña que sólo existe para Python?

    Por supuesto, si es ahora que necesito esa librería y sólo existe en Python, ciertamente que elegiría ese lenguaje y probablemente Django.

    Responder

  6. Ok. Esto es parte de una discusión por email y aporte a este artículo:

    Estructura de Directorios:
    cierto, Rails viene con una estructura de directorios predeterminada que es óptima en la gran mayoría de los casos, pero lo que no dice el artículo es que esa estructura SI se puede modificar. Igual que en Django, en RoR casi todo es configurable. La diferencia es que en RoR todo viene pre-configurado con las opciones más usuales. Si lo que quieres hacer definitivamente necesita una estructura super especial, entonces probablemente no necesitas un framework sino que sólo las librerías individuales. La idea de un framework es sistematizar practicas comunes. Además siempre se pueden utilizar librerías de otros lenguajes como módulos individuales integrados a tu framework de preferencia. Eso es algo que se hace todos los días cuando usas, por ejemplo, ImageMagick desde aplicaciones Rails o Django.

    Redirección y controladores:
    En RoR también se pueden usar Expresiones Regulares e incluso sobreescribir completamente el sistema de rutas (por ejemplo, pueden ver Mephisto, un CMS hecho en RoR, tiene su propio sistema de despacho y controladores). Lo que pasa, de nuevo, es que viene configurado por defecto para las opciones comunes y tiene un DSL hecho en Ruby de más alto nivel que RegEx para definir las URLs de forma fácil.

    Administración de los datos y usuarios
    RoR tiene un sistema de “scaffolding” que crea una interfaz html simple para manipular tus modelos. Django va más allá y agrega usuarios y login automáticos. Pero en los dos casos, si quieres hacer algo realmente serio tienes que hacerlo tu mismo.
    De cualquier manera hay plugins de autentificación de usuarios en RoR muy fáciles de usar.

    Ciclo de desarrollo
    Esto es lo importante: da lo mismo si el framework habla inglés o prepara daikiris. Si te sientes a gusto con las herramientas vas a trabajar mucho mejor y más rápido que con otras herramientas que no disfrutas. Estoy seguro de que un fanático de Django hará cosas mucho mejores que un mediocre en Rails (y viceversa).

    Con frameworks de tan alto nivel no importan tanto las diferencias técnicas (mínimas) entre uno y otro, sino que la capacidad y talento del desarrollador. Los dos frameworks son tan avanzados que yo simplemente elegiría aquél con que me siento más cómodo (o el otro, si mi intención es aprender).

    Responder

    • Demian

      Ismael, la has clavado tio, yo no conozco Django, me ha tocado conocer Rails primero y escucho maravillas de los dos frameworks, pero lo importante es la lógica y cómo la implementas.
      Saludos.

      Responder

    • Carlos

      “…si quieres hacer algo realmente serio tienes que hacerlo tu mismo….”
      es decir el resto no hace cosas serias solo hacen payasadas. umm que logica tan ……

      Responder

  7. Gracias por el comentario, Ismael, muy interesante y muy revelador 🙂

    Responder

  8. Javi Nievas

    “En Django, por contra, se intenta facilitar el uso de toolkits AJAX, pero no se integra ninguno dentro del framework.
    4 puntos para Ruby on Rails, 3 para Django.”

    No entiendo la puntuacion… ¿no es preferible tener la libertad de elección? ¿tener la posibilidad de utilizar el toolkit mas adecuado para un problema no es mejor que tener que usar por narices prototype? Yo intercambiaria la puntuacion en ese concepto.

    Responder

  9. Buenas!

    Quería comentaros, que tras haber trabajado con ambos frameworks, me siento más agusto con python y django, gracias a su elegancia y transparencia (que no quiere decir que rails & ruby no tengan nada de eso). Como programador, siempre tengo la necesidad de saber el por qué y el cómo para poder entender algo. La “magia” de rails es maravillosa. De verdad. El señor DHH ha hecho un increíble trabajo. Nunca pensé que se pudiera alcanzar tal nivel de abstracción. Pero si no entiendo lo que pasa, me olvido, lo que me lleva a tener 5 libros y 12 páginas web abiertas mientras hago algo con rails.

    He visto cientas de comparaciones entre Django y Rails, y, sinceramente, opino que es como comparar el tocino con la velocidad. A cada herramienta su propósito. Yo uso ambos, cada uno cuando lo crea adecuado. La cuestión no es “Django ó Rails?” sino “Qué pueden hacer estas dos bestias por mi?”

    ~ Chris

    Responder

  10. Hace un mes y medio empecé a buscar un framework para empezar a trabajar en la web, intenté con Zope, Ruby On Rails y decenas más, al final terminé amando Django especialmente por una razón: Python. Con Django no solo tengo el framework sino el respaldo de un lenguaje de programación muy popular, fácil de aprender/usar, poderoso, estable, con una gran comunidad, y con muchas librerías para facilitarme el trabajo, creo que los dos frameworks son muy buenos pero me siento más cómodo con Python que con Ruby.

    En fin es cuestión de lenguajes al menos para mi.

    Otra razón fue que me pareció que hay más empresas “grandes” utilizando Python que Ruby y eso debe tener una razón… saludos

    Responder

    • Habrá que utilizar el mejor lenguaje, no el que más haya avanzado en menos tiempo. Según tu teoría, ¿por qué no usas Go, por ejemplo?

      Lo que hay que leer…

      Responder

  11. Realmente esto:
    “”Ruby on Rails proporciona alguna herramienta adicional interesante, como la migración del esquema de una base de datos automaticamente usando el comando migration que le sitúa con 4 puntos frente a los 3 de Django.””
    No es cierto, ya que django también proporciona herramientas para generar modelos a partir de la base de datos.

    Responder

  12. javier

    de cuando es este post?? pq nunca ponen la fecha de publicacion??.

    Responder

  13. Fíjate en la URL de la entrada, anda

    Responder

  14. Django, sencillamente genial, como el lenguaje que se ha usado para hacerlo: Python!

    De lo mejor que existe!

    Sin duda

    Responder

  15. Victor Javier Gomez

    ¿como instalo un plugin en ruby on rails?

    Responder

  16. none

    Google a elegido a python y django para su appengine. Por algo será…

    Responder

  17. rodrigo

    La documentación de django es mas centralizada, posee una comunidad más grande y estable en el tiempo que la de Rails (es cosa de ver estadisticas). Por otro lado python > ruby (por el momento) y siguiente, el ORM de django es simplemente invencible.

    El inicio a Python es más sencillo que el de Ruby, asi como también la documentación de introducción a django.

    Doy como ganador a django! Eso sí cada uno es libre de determinar qué es mejor para él.

    Responder

  18. Carlos

    Hablaba sobre la integracion de Ajax en rails, en rails las librerias integradas son Prototype y Scritaculous… creo q se escribe asi. pero como decian esto es solo algo ya preconfigurado por que ambas librerias son las mas utilizadas pero no he tenido problema en usar YUI o incluso FLEX 3 en rails y estoy totalmente de acuerdo con el comentario de que es relativo cual framework es el mejor, elije con el que mas te sientas comodo ambos son buenos por lo que he escuchado ya que no e utilizado django tanto como rails, y no concuerdo con que rails no sea flexible, es que solo se conforman con utilizar los plugins y la estructura q ya viene configurada y la integracion con ajax y no van mas alla.

    Responder

  19. Hola como van desde cali colombia , por ayi vi que alguien dice que no es posible generar modelos desde la db. falso el comando es manage.py inspectdb > models.py . django se lleva por delante a rails llevo años usando django una vez al año me da por meterme con rails y los tiempos son muy altos en comparacion con django, lo unico malo que tiene django es que cuando agregas un field a un model toca adaptar la db manualmente.para esto ultimo esta south que lo hace automaticamente , pero en fin ambos frameworks estan a años luz de cualquier otra solucion en el mercado como las de java grails,mvc .net , symphoni de php . para php la unica que realmente es buena es cake php y eso que a medias es lento el desarrollo. otro aspecto a descatar es que el despliegue de php es mas rapido copiar archivos y listo , en ror o django es mas complejo necesitas hacer magia algunas veces . en resumen unas por otras . exitos

    Responder

  20. Uno

    Soy Djangista, y estaba preocupado por si me estaba perdiendo algo realmente bueno con RoR. La sintaxis que he visto en tutoriales es horrible (en mi opinión), y por contra Django mantiene la de python. Una vez acostumbrado al MVC… ¡a programar en el python de toda la vida! Pero los de RoR hacen mucho ruido, y parece que te pierdes algo realmente buenísimo.

    Además, el tutorial de Django es maravilloso. En 4 páginas te ponen a funcionar perfectamente (con las generic views y todo, por ejemplo). Gracias a esta entrada, me voy a quedar con Django, porque veo que no me pierdo mucho con RoR. Las puntuaciones finales son lo de menos: me quedo con que son equivalentes… y me gusta más la sintaxis de python.

    Responder

  21. Maco

    me sacaron un 50% de las dudas … mas facil de explicar no hay … grasias

    Responder

  22. Yo empece usando RoR, pero me acabo de pasar a Django por su sencillez y como maneja los views.

    Responder

  23. Charlie

    En lo particular a mi me gusta mucho Python y estoy por hacer algunos proyectos con el micro framework Flask. Despues de trabajar un par de años en el desarrollo web y ver todo lo que sucede tras bambalinas (en el servidor) podria decir que no importase tante el lenguaje y el framework que uses. Lo que importa es la facilidad o complejidad de desplegar estas apps en un servidor, xke si es solo por diversion, ok cada quien que escoja su lenguaje, pero si intentas hacer una app para produccion entonces si te va a importar que realmente tienes que hacer para que salga a la luz.

    En mi caso me estoy peleando con nginx y uwsgi para desplegar mi proyecto en Flask con Python y no se me da, estoy pensando en usar Django pero quiza sea igual de complicado desplegar y x eso llege a este articulo, xke quiza podria optar por Ruby on Rails.

    Pero realmente me gusta Python

    Responder

  24. Rodrigo

    Tomando en cuenta que este articulo fue escrito en el año 2007 para hoy 2014 django es una pasada de framework, no le llegan ni a los talones los frameworks de PHP que es de donde vengo. De Ruby on Rails no puedo hablar, ya que no lo he usado, aunque hablan muchas maravillas pero al parecer no es tan bueno (mucho ruido y pocas nueces) muchos se quejan, sera que estan orientados a dos formas de ver el mundo, finalmente los programadores no somos clones, tenemos un lado “artistico” eso nos hace preferir ciertas herramientas por sobre de otras porque se acoplan a nuestra forma de pensamiento, es interesante como los programadores nos agrupamos en nucleos que comparten las mismas caracteristicas.

    Por otra lado esta comparacion me parece poco objetiva y muy ligera, nada a tomar en serio, un poco de mejor empeño para la proxima se valoraria mas.

    Responder

  25. Leonardo Velazquez

    Hola, pues yo hice cursos de 3 framworks….

    ASP.NET MVC
    Django
    Ruby on Rails..

    de los 3, me gusta mucho mas asp.net mvc

    de RoR a Django, me quedo con RoR…

    aqui les dejo un comparativo un poco mas especifico sobe RoR y Django

    Responder

Deja un comentario