Y'a pas comme un truc qui vous fait hurler là ?
Je n’ai pas vraiment le temps d’écrire en ce moment, malgré une trentaine d’articles en cours de rédaction, au point d’avoir fait sauter la sacro-sainte revue de presse de vendredi dernier.
Je tenais tout de même à vous faire partager ce bout de code digne du Daily WTF sur lequel je suis tombé tout à l’heure en travaillant sur la prochaine release de Typo, l’outil de publication en Ruby on Rails qui propulse ce site. Il se trouve visiblement là depuis plusieurs années, et je me demande si ce n’est pas à lui que mon blogware favori doit sa réputation de bloatware, malgré des optimisations déjà apportées par ailleurs.
Lecteur, ton oeil de lynx verra-t-il ce qui m’a fait hurler ?
Dans le contrôleur
def index
@articles = Article.find_all_by_date(*params.values_at(:year, :month, :day))
@page_title = index_title
@description = index_description
@keywords = (this_blog.meta_keywords.empty?) ? "" : this_blog.meta_keywords
respond_to do |format|
format.html { render_paginated_index }
format.atom do
render :partial => 'articles/atom_feed', :object => @articles[0,this_blog.limit_rss_display]
end
format.rss do
auto_discovery_feed(:only_path => false)
render :partial => 'articles/rss20_feed', :object => @articles[0,this_blog.limit_rss_display]
end
end
end
def render_paginated_index(on_empty = _("No posts found..."))
return error(on_empty, :status => 200) if @articles.empty?
@pages = Paginator.new self, @articles.size, this_blog.limit_article_display, params[:page]
start = @pages.current.offset
stop = (@pages.current.next.offset - 1) rescue @articles.size
# Why won't this work? @articles.slice!(start..stop)
@articles = @articles.slice(start..stop)
render :action => 'index'
endDans le modèle
# Find all articles on a certain date
def self.find_all_by_date(year, month = nil, day = nil)
if !year.blank?
find_published(:all,
:conditions => { :published_at =>
time_delta(year,month,day) })
else
find_published(:all)
end
endEt non, cette fois, il n’y a rien à gagner.
9 commentaires sur Y'a pas comme un truc qui vous fait hurler là ? »
-
Bruno Michel le 12 novembre 2008 à 01h18
C’est un peu bourrin de charger tous les articles pour n’en afficher que quelques uns, et oui, cela ne doit pas aider pour les perfs.
-
Bruno Michel le 12 novembre 2008 à 01h20
Il semble y avoir un bug sur le formulaire pour laisser un commentaire. Il envoie sur l’URL http://t37.netya-pas-comme-un-truc-qui-vous-fait-hurler-li/comments (il manque un / entre t37.net et le slug du billet).
-
NiKo le 12 novembre 2008 à 09h25
Haha, fortune.
-
Frédéric de Villamil le 12 novembre 2008 à 09h52
Bruno : effectivement, j’avais un soucis depuis la migration de mon thème vers HEAD. Ça pourrait expliquer pourquoi je n’ai pas eu de commentaires depuis une semaine en fait
-
Harry Seldon le 14 novembre 2008 à 20h17
Heu tout cela ne me parait pas très clair. En revanche je suis interessé par connaître le code à changer si c’est simple et que ça peut être fait sur la v5.1.2. Merci
-
Frédéric de Villamil le 14 novembre 2008 à 23h56
@Harry Seldon : en gros, aujourd’hui, quand tu veux afficher n’importe quelle page de ton blog hors billet seul, Typo charge toute la table articles en mémoire (plus la table feedbacks, la table categories et la table tags, relations obligent). Puis, il prend les lignes du tableau qui l’intéressent (généralement une dizaine) et affiche.
Pour les tags et les catégories, c’est un tout petit peu moins bourrin puisqu’il ne fait qu’avec les articles liés à l’article ou au tag en cours.
Cette aberration est due à l’ancien système de pagination de Rails qui calculait la pagination à partir d’un tableau contenant l’intégralité des billets.
Et les réponses à tes questions sont :
Le code à changer se trouve un peu partout dans la version de développement, et pour cette partie, dans le commit http://github.com/fdv/typo/commit/30f089a940be74b5303af787e119c24297fb0103
Si c’est simple : non. Notamment parce que ça nécessite de : - changer le système de pagination (OK simple) - partout dans l’admin (un peu moins) - partout coté front end (amuse toi) - dans le thème - ce qui implique notamment de modifier assez lourdement le modèle article.rb un chouilla monolithique afin de l’adapter à notre ami will_paginate - modifier un certain nombre de tests
Est-ce que ça peut être fait sur la 5.1.2 : oui, mais honnêtement, vu la lourdeur des modifications que ça entraîne, ce serait vraiment très con. Autant passer sous trunk.
-
Harry Seldon le 15 novembre 2008 à 09h56
OK Merci pour la réponse.
Je vais essayer de passer sous trunk. Mais bon ça demande un peu de sport vu qu’il faut passer sous git (cf http://harryseldon.thinkosphere.com/2008/11/08/grand-gardening-with-gi) et qu’il faut passer sous Rails 2.2. (Même pas sûr que mon hébergeur l’ait, du coup il faudra que je customise mon install).
En tout cas, je suis en train. Au passage t’as du recevoir un patchoune (très petit patch) via github.Au passage quelle est la raison fondamentale pour laquelle Rails 2.1 n’est pas supporté par trunk ?
Y-a-t-il des points particuliers auquel il faut attention pour la migration de la 5.1.2 à trunk ?
-
Harry Seldon le 15 novembre 2008 à 10h01
J’ai mal copié/collé mon lien*. Ca me fait penser qu’un de mes utilisateurs m’a aussi fait la remarque que ce serait cool si les utilisateurs pouvaient éditer leurs commentaires a posteriori.
Cependant j’imagine bien que ce ne doit pas être si simple que ça (il faut mettre en place un système de login etc.) -
Frédéric de Villamil le 15 novembre 2008 à 10h15
Alors, pour rails 2.2, il est inclut dans les submodules. Donc un coup de
git submodule initpuisgit submodule updatedans ton Typo et tu l’as.J’ai bien reçu le patch, et tu y as rajouté une typo : en anglais, tu ne mets pas d’espace insécable entre la fin de la phrase et le ? contrairement au français ou tous les signes de ponctuation doubles (?, ;, :, ! …) sont précédés d’un espace insécable.
La raison fondamentale au non support de Rails 2.1, c’est que j’ai décidé de ne pas faire de release de Typo pour cette version, de manière totalement arbitraire, parce que je n’avais pas le temps de faire la migration.
Et pour les points importants, je dirais backup complet de ta base de données, et rake db:migrate RAILS_ENV=production avant de redémarrer ton Typo
Et pour les inscriptions, on peut, mais elles ne sont pas activées chez moi.
Réagir à Y'a pas comme un truc qui vous fait hurler là ?
Trackbacks sur Y'a pas comme un truc qui vous fait hurler là ?
Les trackbacks sont fermés pour cause de spam.
