ruby
Quelles nouvelles dans Rails Edge : Plus de File.join avec Rails.root
Si comme moi, vous avez besoin d'atteindre des dossier dans votre Rails.root. Un des nouveautés de Rails 2.3 intégrée dans ce commit, vous réduira le travail.
Rails.root('public', 'files', 'foo') == File.join(Rails.root, 'public', 'files', 'foo')
La before Paris on Rails, c'est la Rails Party le 30 Novembre 2008
Alors que la journée Paris On Rails aura lieu le 1er décembre, l'association RubyFrance où je fais partie du Conseil d'Administration a décidé d'organiser une après-midi/soirée la veille. Ce rassemblement aura pour objectif de permettre à tous les acteurs de la communauté RubyOnRails de se rencontrer dans un endroit convivial.
Au niveau du programme, il y aura des Hackfest (Typo et peut-être Pictrails ?) et des présentations toutes l'après midi. J'animerais ainsi une ou deux présentations. Tout d'abord sur l'exemple de migration d'une application RubyOnRails de Rails 2.0 à Rails 2.2 en montrant l'exemple de Typo. Ensuite sur les Test par Rspec que je pratique sur Pictrails et Typo.
Bien-sûr, le programme n'est pas figé vu que le maitre mot de cette journée est « Cool et Relax ».
En tout cas moi j'y serais durant toute la période et je serais heureux de rencontrer de nouvelle personne de la communauté.
Donc tout en chœur dites : J'Y SERAIS \o/
Pour plus d'information, vous pouvez consulter la page d'évenement sur le site rubyfrance. Sinon Frédéric sera aussi présent.
[...]Sortie de Pictrails 0.6.0
Un peu après 1 mois de développement une nouvelle version de Pictrails est disponible.
Il n'y a pas de grande modification ni de grand ajout de fonctionnalité. Seule deux fonctionnalités ont été ajoutées. Elles font suite à une demande d'utilisateur.
La première fonctionnalité est la possibilité de copier des images d'une galerie à une autre ? Ça peux parfois être utile.
L'autre fonctionnalité est la possibilité de définir l'image qui défini une galerie. En effet, cette image était défini automatiquement dans les versions précédentes. On peux désormais choisir un image de façon aléatoire ou alors en en définissant une particulière.
Cette version est la dernière supporté par la version de Rails 2.1. Désormais le HEAD sera basculé sur Rails 2.2 qui ne devrait pas tarder à sortir.
Vous pouvez donc télécharger la nouvelle version et l'installer.
[...]Supprimer tous les messages d'anonyme du forum redmine
Si comme moi vous avez ouvert le forum Redmine au anonyme pour éviter qu'un utilisateur ne soit obligé de s'inscrire pour poster sur le forum, vous êtes sujet au Spam, vu que Redmine n'a encore aucun système anti-spam. Vous pouvez ainsi vous retrouver dans cette position.
Une fois que vous avez bloqué l'ajout de message par les anonymes, il faut maintenant faire le ménage. Soit, vous prenez message par message et faite le bouton supprimer. Soit vous utilisez la console comme moi. Voici donc les commandes à réaliser pour supprimer tous les messages d'anonyme du forum. Bien-sûr, cela implique que si vous avez des utilisateurs qui ont posté en tant qu'anonyme, leur poste sera détruit.
rails@shinydedi /var/rails/redmine/current $ ./script/console production Loading production environment (Rails 2.0.2) >> User.anonymous => #<AnonymousUser id: 4, login: "", hashed_password: "", firstname: "", lastname: "Anonymous", mail: "", mail_notification: false, admin: false, status: 0, last_login_on: nil, language: "", auth_source_id: nil, created_on: "2008-01-26 16:39:30", updated_on: "2008-01-26 16:39:30", type: "AnonymousUser"> >> User.anonymous.id => 4 >> Message.find_all_by_author_id(User.anonymous.id).size => 1693 >> Message.find_all_by_author_id(User.anonymous.id).each { |me| me.destroy } => [.........] >>
Activer un compte Redmine par la console rails
Si par le plus grand malheur vous avez bloqué l'envoi de mail sur votre machine où redmine est installé. Vos utilisateurs ne peuvent plus recevoir d'email d'activation de compte. Redmine étant super pratique, vous ne pouvez pas activer le compte directement par l'interface web. Il faut donc passer par la console rails pour activer ce compte. Voici donc les commandes à réaliser pour activer le compte.
Dans cet exemple, nous allons supposer que je veux activer le compte du login 'ook'
Premièrement, il faut se connecter en console dans le mode production, où celui utilisé par votre instance web.
$ ./script/console production
Une fois dans la console, il faut chercher l'utilisateur, changé son état et ensuite supprimer le token d'activation. La suite de commande permet cela :
rails@shinydedi /var/rails/redmine/current $ ./script/console production Loading production environment (Rails 2.0.2) >> u = User.find_by_login 'ook' => #<User id: 7, login: "ook", hashed_password: "8a45629b374f3e667ea72494246b17a11309ffff", firstname: "Thomas", lastname: "XXX", mail: "thomas@xxx.com", mail_notification: false, admin: false, status: 2, last_login_on: nil, language: "fr", auth_source_id: nil, created_on: "2008-10-27 18:50:54", updated_on: "2008-10-27 18:50:54", type: nil> >> u.status = User::STATUS_ACTIVE => 1 >> u.save => true >> t = Token.find_by_action_and_user_id('register', u.id) => #<Token id: 16, user_id: 7, action: "register", value: "brVmdX8Sf0IecApDEWs0BmiD6ZN3DgsDoshpBZ2e", created_on: "2008-10-27 18:50:54"> >> t.destroy => #<Token id: 16, user_id: 7, action: "register", value: "brVmdX8Sf0IecApDEWs0BmiD6ZN3DgsDoshpBZ2e", created_on: "2008-10-27 18:50:54">
Ça y est votre utilisateur est activé. Il peux désormais se connecter comme si il avait réalisé l'activation par mail.
[...]Sortie de Pictrails 0.5.0
Peu de temps avant mon anniversaire qui a lieu le 11 Octobre, voici une nouvelle version de Pictrails.
Durant cette release, la grosse nouveauté est l'ajout des commentaires. Désormais sur chaque photo, des commentaires peuvent être ajoutés. Au niveau de l'administration, il y a la possibilité de gérer ces commentaires en les éditant et les supprimant. Ce n'est bien sûr que le début de l'ajout des commentaires sur pictrails. Si vous désirez formater vos commentaires, vous pouvez le faire avec le format redcloth.
Au niveau ergonomie, j'ai ajouter la vue des photos précédentes et suivantes dans la même galerie. Cette fonctionnalité n'était pas intégré dans Pictrails. Cette erreur est donc désormais résolu.
Les photos sont désormais triés de la photo la plus récente à la plus ancienne dans la vue des photos pour la galerie.
Tout retour est toujours le bienvenu ainsi que la proposition de design. Je rappele aussi qu'une version de démo est disponible. avec comme login admin/pictrails
[...]Quelles nouvelles dans Rails Edge : Connection pools
Traduction de l'article de Ryan Daigle, What's new in edge rails : Connection Pools
Avec la venue prochaine de Rails thread-safe, il était nécessaire d'ajouter
le pool de connection à la base de donnée. Moins qu'une fonctionnalité, mais
un détail d'implémentation caché. Vous avez la possibilité de définir la
taille de ce pool. Cette configuration est dans le fichier
database.yml avec le mot clé pool:
development: adapter: mysql username: root database: myapp_dev pool: 10
Vous voilà avec un pool de connection. Facile
[...]Quelles nouvelles dans Rails Edge : Les layouts pour les mails
Traduction de l'article de Ryan Daigle, What's new in edge rails : Mailer Layouts
Rails a ajouté la possibilité d'utiliser des layouts pour les mails exactements comme il est actuellement possible pour leurs grand frère les vues. Il faut juste noté que pour qu'un layout de mail soit automatiquement reconnu, il doit se finir par _mailer. Donc pour un mail:
Cass UserMailer < ActionMailer::Base def registration(user) subject "You've registered" from "system@example.com" end end
vous n'aurait besoin que d'un layout à layouts/user_mailer.html.erb. Si vous spécifiez explicitement le layout vous n'avez pas besoin du suffix _mailer. Ainsi, dans l'exemple suivant, un layout à layouts/email.html.erb suffit:
class UserMailer < ActionMailer::Base layout 'email' ... end
A partir de maintenant, vous pouvez faire de joli petit email. Vous avez désormais tous les outils.
[...]Quelles nouvelles dans Rails Edge : Les Shallow routes
Traduction de l'article de Ryan Daigle, What's new in edge rails : Shallow routes
Le système des routes avec Rails est assez malin. Dans une optique d'être le plus descriptif possible, la description des ressources est fait au niveau des URL avec une DSL spécifique pour les routes :
map.resources :users do |user| user.resources :articles do |article| article.resourcs :comments end end
Néanmoins, si cette configuration permet de voir les articles disponibles à
l'URL /users/1/articles et les commentaires à l'URL
/users/1/articles/1/comments, il y a des cas où on voudrais outrepasser cette
hiérarchie et accéder directement à la ressource en question. Désormais avec
l'option des shallow route, vous le pouvez.
map.resources :users, :shallow => true do |user| user.resources :articles do |article| article.resources :comments end end
Cette configuration permet de conserver les routes imbriquées et vous donne accès directement au route comme ceci:
articles_path #=> '/articles' comments_path #=> '/comments' article_comments_path(@article) #=> '/articles/1/comments'
Plus besoin de déclarer séparement les routes directes en plus des routes imbriquées. l'option :shallow fait tout les routes nécessaires automatiquement pour vous.
Profiler une requête rails
Pour découvrir le bug dont j'ai reporté précédement les effets, j'ai voulu réaliser un profile de la requête executée. Ca devait me permettre de voir ce qui prenait vraiment beaucoup de temps dans l'execution de cette page.
Utilisation du script Request Profiler
Depuis Rails 2.0, un nouveau script a été ajouté,
script/performance/request. Ce script permet de réaliser un
profile d'une ou plusieurs requête internet.
Pour indiquer les requêtes à executer il suffit de réaliser un petit fichier de script avec le même format que les tests d'intégrations. Voici un exemple issue du changelog de rails.
get_with_redirect '/' say "GET / => #{path}" post_with_redirect '/sessions', :username => 'john', :password => 'doe' say "POST /sessions => #{path}"
Une fois le script réalisé, il suffit de lancer la commande en définissant le nombre de requêtes qui seront effectuées
$ ./script/performance/request -n 10 login_session.rb
Par contre, il faut faire très attention, il n'y a aucune solution (ou tout du moins à ma connaissance) pour définir les valeurs de la session. La session est vierge à chaque lancement de script. Il faut donc réaliser la connection de login au préalable pour avoir un utilisateur loggé par exemple.
Incompatibilité Rails 2.1 et ruby-prof
Alors que j'avais indiqué l'ajout d'un nouveau script dans Rails Edge qui nécessitait ruby-prof 0.6.1, je pensais que c'était le seul endroit qui nécessitait cette version de ruby-prof qui n'existe pas encore (dernière version stable : 0.6.0 en téléchargement sur rubyforge). Hélas, ce n'est pas le cas. Depuis la version 2.1 de Rails, le script performance/request nécessite aussi ruby-prof 0.6.1. Mais cette version, n'est toujours pas encore sortie officielement. Il faut donc générer et installer ce gem pour arriver à avoir cette fonctionnalité. En effet, même en modifiant la version de ruby-prof des méthodes n'existent pas dans les versions antérieurs à la version 0.6.1
Génération et installation de ruby-prof-0.6.1
Il faut d'abord récupérer les sources directements à partir du svn de ruby-prof
svn co http://ruby-prof.rubyforge.org/svn/
Ensuite, il faut générer le gem
$ rake package
Enfin, il suffit d'installer le gem.
# gem install pkg/ruby-prof-0.6.1.gem
Désormais, ruby-prof 0.6.1 est installé et vous pouvez utiliser pleinement le script performance/request.
[...]