Liens connexes

Dépêche modérée par

Dépêche éditée par

: Sortie de Ruby on Rails 2.0

Posté par EppO (page perso, ). Modéré le 11 décembre 2007.
0
Ruby on Rails, le célèbre framework basé sur le langage Ruby, permettant le développement rapide d'applications web selon le modèle MVC (Modèle, Vue, Contrôleur) sort en version 2.0.

Le développement qui a duré une année a permis l'ajout de nombreuses fonctionnalités, la résolution de beaucoup de bugs, une orientation tournée vers le REST, et pas mal d'allégements au niveau du core (externalisation de fonctionnalités en greffons).

DHH, le créateur du framework Ruby on Rails, a commenté ces nouveautés lors de Paris on Rails. Pour les absents, des slides et/ou des podcasts des présentations devraient être mis en ligne prochainement.

> Lire la suite (154 commentaires, moyenne: 2,1).   [dépêche : 5949 caractères]

Ressources et webservices
Rails a tranché dans le débat REST - SOAP au profit du REST.
Le module ActionWebservice a été sorti du core et placé en greffon pour ceux qui veulent continuer à utiliser du SOAP. ActiveResource est le nouveau module qui est similaire à ActiveRecord mais avec une approche ressource.
Au passage, l'url des ressources a été modifié, l'utilisation du point virgule ( ; ) pour séparer l'action de la ressource a été remplacé par un slash ( / ), à cause de navigateurs et bibliothèques HTTP qui ne le supportaient pas en tant que séparateur de requêtes.

Multi-vues
Rails 2.0 sépare le format du template (html, xml, atom, rss, ...) du moteur de rendu. Le template show.rhtml devient donc show.html.erb (ERB étant le moteur de rendu par défaut).
D'autres moteurs de rendus existent aussi, builder utilisé pour générer du atom+xml, et HAML principalement utilisé aujourd'hui pour générer des templates adapté à l'iPhone.

Identification des records
On avait l'habitude en version 1.2.X d'utiliser person_url ou person_path pour générer des URLs du record person, il est plus facile avec Rails 2.0 de gérer les redirections ou les liens:

# person est une instance de la classe Person,
# qui sera mappé en person_url
redirect_to(person)
link_to(person.name, person)
form_for(person)

Authentification HTTP
L'authentification basique HTTP est maintenant supportée, ce qui permet facilement de sécuriser efficacement les appels d'APIs

Javascript, CSS et images
Il est plus facile en tant que développeur de séparer ses fichiers javascripts ou CSS en plusieurs parties logiques que de maintenir un seul gros fichier. Mais cela génère du coup un surcoût au niveau HTTP car cela génère des requêtes de beaucoup de fichiers.
Il est maintenant possible de mettre en cache ses fichiers javascript et CSS en un seul fichier en production, tout en les gardant séparés pour le développement.
Pour augmenter le nombre de connexions conccurrentes, il est possible de spécifier dans les fichiers de configuration des adresses de serveurs qui hébergeront les fichiers statiques :

ActionController::Base.asset_host = “assets%d.example.com”


Sécurité
Rails 2.0 embarque un mécanisme interne pour contrer les attaques CSRF sur les formulaires et les appels AJAX.
De même pour les attaques XSS, la méthode sanitize qui utilisait une blacklist pour fonctionner, ce qui compliquait la tâche pour la mise à jour de cette liste, utilise dorénavant une whitelist qui garantira une meilleure protection.

Gestion des exceptions
En plus de pouvoir gérer les exceptions par action (par un bloc rescue), une nouvelle macro rescue_from permet de capter toutes les exceptions d'un certain type de manière globale aux controllers.

Session basée sur les cookies
Les sessions ne sont plus stockées par défaut sur le système de fichiers du serveur web mais au niveau du client sous une forme qui ne peut pas être forgée. En revanche, le contenu sera visible, donc ce mécanisme de stockage de sessions n'est pas adapté si vous avez besoin d'y stocker une information que ne doit pas voir l'utilisateur.

Profileur de requêtes
Pour détecter les points de contention de votre application, il est possible grâce à un nouveau script de générer un rapport qui détaillera tout cela (script/performance/request)

Performance
La plus grosse avancée au niveau des performances se situe au niveau du cache introduit directement dans l'ActiveRecord, ce qui permet de mettre en cache des requêtes SELECT similaires qui permettra d'éviter des requêtes inutiles sur la base de données.
Les fixtures ont été grandement améliorées, on parle de gain pouvant atteindre 100 à 200%.
Beaucoup de chose dans le core de Rails ont été externalisés en greffon (tous les acts_as_*, in_place_editor, autocomplete_for, paginate, ...), ce qui allège considérablement le core et permet de charger uniquement ce qui est nécessaire.

Migrations plus sexy
Un nouveau format, plus efficace et moins verbeux a été mis en place :
Avant
create_table :people do |t|
t.column, "account_id", :integer
t.column, "first_name", :string, :null => false
t.column, "last_name", :string, :null => false
t.column, "description", :text
t.column, "created_at", :datetime
t.column, "updated_at", :datetime
end

Après
create_table :people do |t|
t.integer :account_id
t.string :first_name, :last_name, :null => false
t.text :description
t.timestamps
end

XML en entrée, JSON pour la sortie
Il existe maintenant la désérialisation en XML et la sérialisation en JSON.

Le debuggueur de retour !
Grâce au paquet (gem) ruby-debug, il suffit de placer le mot clé debugger quelque part dans le code et de lancer le serveur avec l'option -u pour bénéficier d'un point d'arrêt directement dans le terminal exécutant le serveur, avec possibilité de retour arrière, lister les variables...

Comment installer Rails 2.0
Pour installer Rails, il est plus facile de passer par la commande gem (installateur de paquets ruby) :
gem install rails
Ca marche aussi pour la mise à jour, mais pensez bien à installer les greffons qui ont été éjectés du core et que vous utilisez !

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

[+] Célèbre ?

Posté par IsNotGood () le 11/12/2007 à 20:08. (lien). Évalué à -3.

> Ruby on Rails, le célèbre framework

Je ne le connais pas, j'imagine que beaucoup beaucoup de gens ne l'a pas utilisé ni le connait.
Perl, php, python, java doivent être plus "célèbre".

NB : Je ne remet en rien en cause les mérites de Ruby (que j'ignore totalement ; oui, c'est de ma faute).

Herbergement

Posté par GaGadget () le 11/12/2007 à 22:01. (lien). Évalué à 2.

Un hebergeur "gratuit" qui supporte le ruby et encore mieux qui fournisse RoR ?

Un Troll...

Posté par Ummon () le 11/12/2007 à 22:07. (lien). Évalué à 2.

... de temps en temps ça ne fait pas de mal.

Personnellement j'ai toujours aimé le Ruby pour pleins de raisons (depuis bien avant Rails)... mais une chose qui me fait un peu peur c'est la lenteur du bouzin.

Petite comparaison : Erlyweb / Rails :
http://yarivsblog.com/articles/2007/12/09/erlyweb-vs-ruby-on(...)
(j'aime aussi l'Erlang)


(oui je sais, 1: le test n'est pas significatif, 2: ya pas que les performances brutes qui comptent, 3: etc..)

Bon je me taille avant que tout pète ->[]

mise à jour?

Posté par Lanus Tordable () le 11/12/2007 à 23:44. (lien). Évalué à 1.

Je suis pas spécialiste de Rails, j'en ai fait un moment mais dû stopper pour d'autres activités or, j'aimerais m'y replonger à présent. Les bouquins que j'ai datent maintenant. A votre avis, qu'est-ce que cette version implique comme temps/ressources de réapprentissage?

euh... oui merci d'avance :)

--
"Le logiciel libre c'est comme le sexe : c'est souvent poilu." (Lanus Tordable)

ROR et ses limites

Posté par mister popo (page perso, ) le 12/12/2007 à 09:45. (lien). Évalué à 7.

La version précédente de RoR avait un problème rédhibitoire, le serveur était mono threadé. Donc, pour bosser et faire une démo qui impressionne, ça passe, sinon, ça devient de suite plus compliqué. Il faut lancer tout un tas de serveur, et utiliser un serveur web comme lighttpd qui fait du roundrobin sur tout ça. Du cluster sur une seul machine. J'ai peut être pas les yeux en face des trous, mais je n'ai pas vu si la version 2 corrige ce problème.

Autre problème, RoR est une application, sans possibilités de contraindre simplement l'utilisation mémoire ou le temps maxi pour exécuter une page, ce qui le rends inutilisable sur un hébergement mutualisé dans le genre de Free.

Autre fantasme, la migration d'un site en PHP qui va bien mais pas joli, vers du RoR qui rulez. Il y a eu récemment un post sur SlashDot sur ce sujet. Le type avait embauché un des dev de RoR pour faire la migration, et au bout de 2 ans, ils ont jeté l'éponge. RoR est un logiciel de prototypage, très bien pour créer from scratch un site, et surtout pas quelque chose vers quoi migrer.

La gestion des sessions en Cookie, comme évolution me parait tout simplement risible. La taille des cookie est limité, et les logiciels civilisé savent gerer les sessions en RAM, sauf si ils sont en cluster ou il faut passer à quelque chose de de suite nettement plus compliqué. PHP a le bon de laisser l'admin s'occuper du choix, sans faire passer une astuce pour une évolution.

La qualité indéniable de RoR est d'être un aiguillon pour tous les autres, il n'y a qu'a voir l'arrivé de Grail, PHPCake ou Django. Un serveur peut être simple, et le volume des fichiers de configurations ne doit pas dépasser le volume de code. Le MVC, l'ORM, l'intégration d'un framework JS, un outil de build, le REST et JSON font maintenant parti des ingrédients d'un bon framework web.

Django

Posté par _p4_ () le 12/12/2007 à 16:55. (lien). Évalué à 3.

Intéressante cette page, pour qui connait peu Rails, comme moi.

Je voulais savoir quelles sont les grosses différences par rapport à Django. J'ai développé plusieurs sites avec et je l'apprécie beaucoup, le trouvant rapide et efficace. J'ai survolé Rails en testant guère plus loin que quelques hello world. Je ne demande pas qui est le mieux, mon lance-troll est éteind; juste quels sont les avantages majeurs de l'un et l'autre. Il y a des fonctionnalités très alléchantes dans Rails qu'il n'y a pas dans Django, je pense à ActiveRdf [ http://www.activerdf.org/ ] notamment qui me fait envie.

Revenir en haut de page