# Encore une comparaison Django/Ruby on Rails, les deux frameworks web qui buzzent

Voila une discussion qui revient souvent sur la mailing-list de Django et Jeff Rodenburg a regroupé les réponses les plus pertinentes dans un même mail (pour comprendre la suite, ce sont des réponses à des nouveaux venus). N'ayant pas assez d'expérience avec Ruby on Rails, je préfère m'en tenir à la traduction des arguments de vétérans. Il y a bien sûr un certain parti pris et je serais intéressé par le même style de résumé provenant de la mailing-list RoR, je suis sûr que la question doit être fréquemment posée aussi... pas forcément avec les mêmes arguments en retour.

## L'avis de Jeff Rodenburg

Quelques observations d'un vétéran du développement découvrant ces deux frameworks :

- Déploiement de Rails face au déploiement de Django : Django semble bénéficier d'un plus dans cette colonne alors que Rails est un point d'interrogation. Apache2/Mongrel est la solution préconisée, mais ça reste une version qui doit faire ses preuves. J'ai récemment eu affaire à un déploiement d'une application Rails et de ce point de vue, Rails n'est pas mature. Heureusement, Django peut être déployé avec mod_python, ce qui est moins contraignant.

- Ma perception au sujet de la documentation n'est qu'une perception. La communauté Rails a à sa disposition des livres, ce qui la distingue pour le moment. L'édition de leur site est suspecte, bien que certaines pages au sujet de l'installation ou du déploiement soient convenables. Si je peux faire une suggestion à la communauté Django, ce serait de développer davantage la documentation pour que quelqu'un comme moi puisse un peu mieux prendre en main le système lors de la découverte.

- Integration v2.0 : c'est un nom générique que je donne à chaque application qui évolue après sa première mise en production. Je place Rails dans la catégorie des mentalités monolithiques, ce qui est surprenant compte tenu de ce qui est annoncé. D'après mon expérience, passée une certaine taille, un système n'a jamais évité une itération où vous êtes confrontés à l'accès/la modification des données en dehors des constructions originales, c.-à-d. une couche données séparée. Je ne sais pas sûr de savoir si c'est réalisable avec l'architecture de Django mais les ressources de Rails pour procéder à cette intégration son inexistantes.

- La structure de template (dont je ne connais pas tous les détails) est problématique pour moi. Nous avons vu que la présentation est en rapport avec les templates. Peut-être que c'est juste une question de préférences mais j'apprécie le fait que Django conserve la vue séparée du template.

Si mon avis est biaisé en faveur de Django, c'est en partie en raison de ma préférence pour Python mais aussi de mon dédain pour le jihad Rails qui ne cesse d'enfler. Pour être totalement honnête, je suis du midwest. Comment est ce que je peux ne pas être en accord avec quelquechose sortant de Lawrence, KS ? ;-)

## L'avis de Sean Schertell

Je suis passé de Django à Rails et depuis je m'éclate.

Mais ça dépend vraiment de ce dont vous avez besoin. Si vous développez une seule application monolithique, Rails est très bon. J'ai réalisé une énorme application de facturation/comptabilité pour une compagnie d'assurance avec Rails. Elle prend en charge des dizaines de milliers de membres et traite plus d'un million de dollars de transactions par mois à travers un processus atrocement complexe de facturation. À mon avis, Rails est parfait pour ce genre de choses. Je suis sûr que j'aurais pu faire la même chose avec Django mais Rails semble un peu mieux adapté à ce type de choses : de grosses et uniques applications. L'inclusion d'ajax nativement est très pratique aussi. Et la syntaxe Ruby est un réel plaisir à utiliser (même si je suis définitivement fan de Python).

Mais je considère qu'il y a des inconvénients à Rails, voici les raisons pour lesquelles j'ai changé :

- les applications Rails ne sont pas portables. Du tout. Pas seulement un peu. Pour ma part, je ne passe pas mon temps à réaliser des applications de facturation pour des assurances. Je développe principalement des sites internet composés de petites applications comme une gallerie photo, un blog ou un panier d'achat. Avec Django, vous pouvez créer une appli, la placer sur un serveur quelquepart, et pour autant de sites (projets) que vous le désirez, vous pouvez prendre cette appli, la styler et l'utiliser. Avec Rails, il n'y a pas de concept « d'appli » pouvant être importées au sein de « projets ». Il n'y a qu'une énorme appli qui est votre projet. Pour du développement web, ça craint.

- les applications Rails sont un peu délicates à déployer. J'ai entendu dire que Apache2/Mongrel est sur le point de résoudre ce problème. Mais la méthode standard de déploiement des applis Rails est d'utiliser Lighttpd avec FastCGI en passant par Apache. C'est pas simple et parfois le processus FastCGI s'emballe et utilise toute vos ressources jusqu'à ce que vous tuyez chaque processus. Le déploiement typique de Django utilise Apache/mod_python. C'est rapide, stable et facile à déployer.

- La documentation !!! Je suis surpris que tu mentionnes ça comme étant un avantage de Rails. C'est l'une des rares choses que je trouve vraiment frustrante avec Rails. Les docs sont justes inexistantes. Bien sûr tu peux googler des tutoriels ou acheter le « Agile book » (qui est excellent au passage). Mais la documentation actuelle du site de Rails est horrible. La plupart des gens participent au wiki, certaines d'entre elles étant dépassées ou même fausses, et il y a d'énormes manques. La documentation Django est l'une des choses qui m'a remis sur la bonne route. Cherchant une alternative à Rails, lorsque j'ai vu la partie documentation du site, ce fût une réelle bouffée d'air frais. Ahhhhh... c'est donc ainsi qu'une documentation devrait être :-)

Passons maintenant de l'autre côté :

Il y a quelques trucs dans Django qui ne sont pas parfaits.

- l'interface d'administration est un piège. La partie administration est incroyablement géniale lorsqu'elle correspond exactement à vos besoins. Mais si vous décidez, pour une raison quelconque, de faire votre partie administration personnalisée, apprêtez vous à lutter. Par exemple, une identification basique. Vous pouvez utiliser le système d'identification inclus, mais dans ce cas vous allez devoir écrire en dur les urls pour les pages de login/logout. Vous n'aimez pas ces urls ? Dans ce cas, il va vous falloir écrire votre propre système d'identification à partir de rien. Je me suis aperçu que c'était le cas pour de nombreuses choses. Django vous permet d'avoir quelques trucs en natif, mais ce n'est pas aussi flexible que ce que j'aurais voulu. Et réécrire à partir de rien m'a demandé plus de travail que ce que cela avait aurait été le cas avec Rails (par exemple pour l'identification).

- pas d'ajax. Rien ne vous empêche d'utiliser prototype ou dojo ou autre. Mais je dois avouer que la manière de faire de l'ajax avec Rails me manque, d'autant qu'il est aussi possible de s'en passer aisément.

Un dernier point au sujet des besoins et des finitions : peut-être la plus grosse surprise lorsque j'ai découvert Django, c'est le degré de finition du framework. Rails et Django sont très similaires dans leur catégorie à mon avis. Pour être honnête, je m'attendais à trouver Django un peu moins performant sur certains aspects et ce n'est pas du tout le cas. C'est très robuste, bien documenté et ça fonctionne très très bien. La communauté est géniale aussi. Django est vraiment un cran au dessus par rapport à Rails pour ce qui est de la finition.

## L'avis de Russell Keith-Magee

Disclaimer : je suis un développeur Django. J'ai étudié à Rais avant de m'impliquer avec Django, et je « jette un œil » occasionnellement mais je n'ai pas une expérience significative avec Rails. Je peux me tromper sur certains points, donc n'hésitez pas à me corriger.

Vous avez raison lorsque vous dites que Rails et Django sont très semblables. L'évènement Snakes vs Rubies l'année dernière a confirmé le fait que Django et Rails ont des buts similaires - ils servent à développer rapidemment des applications aussi facilement que possible, dans le but de rendre l'usuel trivial et le spécifique possible. Le serveur en rechargement permanent, la facilité à arriver à un « hello world » et l'utilisation de langages avec des capacités importantes d'introspection sont des fonctionnalités communes aux deux frameworks.

Je suis sûr que d'autres avanceront d'autres opinions mais voici ma vision des différences.

- (Évidemment) Python/Ruby. Ce n'est pas une raison sérieuse de choix mais ça peut faire la différence.

- Design de la base de données. Rails commence par vous faire définir une table SQL dans votre base de données, puis écrit le modèle qui reflète l'état du SQL. Si vous modifiez une table dans votre base, votre modèle change pour réfleter ce changement. Django commence par la définiton de votre modèle, puis s'occupe de créer les tables reflétant ce modèle. Il y a actuellement un projet Google SoC gérant les problèmes de migration du schéma lors des changements du modèle. Qu'est ce qui est le mieux ? Je préfère l'approche de Django, car pour un nouveau projet, je n'ai pas besoin d'écrire la même définition deux fois (j'ai assez écrit de C++ dans ma vie pour ne jamais plus avoir envie de réitérer ça :-). J'ai souvent lu que l'approche Rails était plus intéressante lorsque l'on veut partir d'une base existante. Je n'ai pas eu à le faire mais Django peut se baser sur une base existante, la définition des modèles est suggérée et la création des tables est alors sautée si nécessaire.

- l'interface d'administration. Rails est un échaffaudage, mais vous devez quand même écrire au moins quelques templates pour avoir une interface de gestion. Chaque application Django a une interface de gestion incluse. Il y a des extensions de Rails permettant d'avoir la même fonctionnalité, mais elles ne sont pas inclues.

Pour moi c'est un sérieux avantage. Les utilisateurs finaux ne devraient jamais voir l'interface d'administration. Mais en termes de création de projet je trouve l'interface d'administration inestimable. Elle permet de vérifier si vos modèles sont corrects en insérant quelques données de test pour valider vos vues en cours de développement. De plus, toutes les données utilisées dans l'interface d'admin sont aussi accessibles à l'utilisateur final par l'intermédiaire de leurs propres vues.

## Mon avis

Bon finalement je ne peux pas m'en empêcher ;-). Vous aurez noté la différence de niveau de ces trois témoignages (même après traduction on sent toujours que le premier est un peu aigri...). Quelques précisions :

- l'interface d'administration ne doit pas être considérée comme étant destinée aux utilisateurs, elle sert à administrer votre projet comme son nom l'indique et c'est vraiment très pratique pour développer ;
- pour la documentation, aucun des comparatifs ne parle du prochain livre sur Django qui devrait sortir en Octobre (en fait probablement plus tard, il faut que la 1.0 soit sortie avant) ;
- pour moi, Django est vraiment lié à la publication. Ça fait très 1.0 de dire ça mais c'est 90% du web quand même :-).

Et vous, pourquoi appréciez vous Django et/ou Rails ?

### Articles peut-être en rapport

- Sortie de Django 1.0, une année de nouveautés
- ★ Astuces et bonnes pratiques Django
- Des vacances et des liens

### Commentaires

Noé le 21/09/2006 :

Beuuuh, Nitro c'est mieux.
Voir les screencasts sur cette page :
www.nitroproject.org/docu...
Par rapport à Rails, c'est carrément plus flexible et, je trouve, plus intuitif.
(Notamment leur ORM, Og, est excellent)

Frédéric de Villamil le 22/09/2006 :

J'aurais aimé, dans un monde idéal, que tu ne fasses pas seulement parler des pythonistes convaincus passés à Ruby, mais aussi des rubyistes convaincus s'étant un moment égarés dans les méandres de python, pour savoir ce qu'ils avaient à en dire.
Ton article m'aurait semblé moins biaisé mjdcjdr.

Black Pignouf le 24/09/2006 :

Je n'ai toujours pas trouvé de comparaisons objectives Django/Rails, mais pour ce qui est du premier avis, c'est vraiment du f....age de g....le!
Enfin bon, merci quand même d'avoir traduit tout ça!

David, biologeek le 25/09/2006 :

@Frédéric : comme je l'ai dit en introduction, il me suffit d'un lien ;-)

NiCoS le 25/09/2006 :

Pour avoir lu le bouquin sur Rails, force est de constater qu'il donne plus envie que la doc actuelle sur Django. Par contre, comme a pu me le montrer Niko, des pans entiers ne sont plus à jour (par ex dans le bouquin, on gère soit même ses bases, alors qu'il existe maintenant un utilitaire comme dans Django pour faire de la création de bases à partir d'une classe).
Comme j'ai pu le dire précédemment, le tutoriel est django est pas à la mesure du framework je pense. A ce jour, je serais donc plus pro-rails que pro-django juste pour la partie doc...
Ensuite, django avait l'air plus orienté publication, alors que rails est plus orienté application, donc est-ce que cela a un réel sens de les comparer ? ne vaudrait-il pas mieux comparer rails à turbogears par ex ? A moins que ce ne soit pas hype et faire du buzz de parler de turbogears ;-D

EL AATIFI Sidi Mohamed le 21/10/2006 :

J'utilise du python, c'est un vrai plaisir Django me permet de faire les choses plus rapidement, et plus "Clean".
Et j'ai aussi utilise Ruby plus liberal plus pragmatique, encore plus de productivite. Mais je suis sure qu'il y a une raison deriere l'existance de Python et de Django .. et un autre besoin deriere Ruby/Rails c'est au developpeur,et au pro d'avoir un oeil critique sur la technologie, d'examiner le besoin et en consequant chosir l'outil adequat, loin de tout fanatisme !!

dl.zerocool le 26/10/2006 :

Bonjour,
Après une lecture attentive de vos commentaires,
je ne peux que vous donnez raisons à tous.
Je suis un dev. ruby(ror), c/c++, python et php. Ruby est donc pour moi l'outil adéquat pour faire des sites web tournés applications.
En ce qui concerne la documentation Django et ROR on tous les deux un immense trou. En réalité celà serait plutôt un fossé en ce moment. Bien que de nouveau livres et de nouvelles édition (mise à jour) sortent ou vont sortir pour rails. J'en attend toujours un peu plus pour Django.
Pour moi un site web est une application, je ne travail pas dans le domaine de la publication simple tel que les blogs, simple page de news ou encore d'autre. Je suis asser daccord avec les autres commentaires, précisant que Django serait plus adéquat pour la publication. Heureusement ror commence à rattraper le coup en rendant sont travail plus portable ainsi que apache2/mongrel qui viennent nous simplifier la tâche.
Si ruby on rails vous fais peur, vous devriez vous attarder uniquement sur ruby pour acquérir une base potable du langage. C'est un langage très puissant qui à su tirer profit des qualités d'autre langage comme perl ou java. C'est rapide stable, simple avec un model de conception qui lui est propre et qui permet de faire du code même dans un gros projet avec une propreté qu'il est difficile d'égaler dans bon nombre de langages.
Soutenir l'un ou l'autre... Je dirais qu'il faut rester très optimiste et espèrer que les deux langages se spécialisent plus dans la publication ou l'application.
Ce qui est sur c'est que maintenant que j'utilise rails. Adieux php ideux ^^, aurevoir java et bonjour ruby! :)
Un conseil, si vous ne savez pas le quel choisir:
Faites des tout petit projet avec chaqu'un d'entre eux en créant les principals fonction dont vous pourriez avoir besoin. Ceci vous aideras à déterminer le quel est le plus adéquat à vote projet. (Ne naviguer pas trop longtemp entre les deux vous ne feriez que vous noyez dans les différentes qualités et de défauts de chaqu'un.)

Olivier Mengué le 27/11/2006 :

Pouquoi j'aime Django ? Pour son ORM !
J'ai d'ailleurs fait ce week-end une préseantation sur celui-ci aux Journées Perl 2006.
Les dispositives sont ici : o.mengue.free.fr/blog/200...
Concernant le reste de Django, je ne le connais pas encore assez pour me prononcer.

David, biologeek le 28/11/2006 :

Wow, très bonnes présentations ! En plus aux journées Perl, il fallait oser ;-).
N'hésite pas à t'inscrire à la mailing-list de django francophone : lists.afpy.org/cgi-bin/ma...

Philippe le 29/11/2006 :

@Black pignouf : Il y a aussi celui la : blog.breek.fr/2006/10/23/... qui me semble plutot objectif en la matière...

Samuel le 26/01/2010 :

J'ai testé les deux frameworks et je pense que le choix porte plus aujourd'hui sur l'expérience du développeur en python ou ruby que sur les fonctionnalités des frameworks. Pour ma part j'utilise principalement le Ruby on Rails car je le suis depuis ses débuts. Pour les non-initiés, je leur conseil de faire les deux Quick Start:

http://guides.rubyonrails.org/getting_started.html

http://docs.djangoproject.com/en/dev/ref/contrib/comments/