Rails et XMPP
Dans mon article sur Rails et la répartition de charge (que j’aurais du intituler, Rails et la répartition de charge via des tâches asynchrones) j’ai décris l’utilisation de XMPP grâce au plugin ActionMessenger.
J’ai précisé avoir du le patcher afin qu’il supporte plusieurs instances de Rails, sans pour autant préciser le patch, le voici donc :
vim lib/action_messenger/messengers/xmpp4r_messenger.rb
jid += "/ActionMessenger#{Process.pid.to_s}" unless jid =~ /\//
J’ai simplement ajouté #{Process.pid.to_s}. Ainsi chaque process mongrel ou fcgi se connecte sur le même compte Jabber mais avec une ressource unique : /ActionMessenger suivi du PID du process. En effet il est impossible de se connecter avec le même compte et la même ressource Jabber sous peine d’obtenir une erreur de ce type : xmpp4r broken pipe.
Ce plugin fonctionne très bien pour envoyer des messages XMPP, pour en recevoir mes quelques essais ont échoués.
De la répartition de charge en Ruby on Rails
Je viens de publier un article en 2 parties sur le blog d’AF83 :
De la répartition de charge en Ruby on Rails 1/2
De la répartition de charge en Ruby on Rails 2/2
C’est plutôt technique, et présente une solution parmis tant d’autres dans ce domaine très particulier.
focus Ferret
Le focus d’O’Reilly consacré à cette bibliothèque d’indexation de document vient de sortir avec un peu de retard : Focus Ferret
Voir mon précédent billet : ferret
RubyFrance a besoin de vous ! 3
Vous lisez ce blog car vous êtes peut être fan du langage Ruby. Actuellement l’association RubyFrance lance son AG annuelle. Cela veut dire renouvellement du bureau et du CA.
Pour tout ceux qui ont participé de prêt ou de loin à une association, ils connaissent les difficultés pour faire avancer les choses. Car il faut un peu de temps souvent pris sur ses loisirs. Cependant lorsqu’on fait parti du Conseil d’Administration le minimum demandé est de voter une fois par an à l’Assemblée Générale. Rien d’impossible :) Pour cela il suffit d’être membre de l’association.
Malgré un extraordinaire développement de Ruby on Rails parmi les entreprises sur Internet, le langage Ruby reste encore trop peu connu en France. Il y a beaucoup de choses à faire pour le promouvoir, notamment participer aux diverses manifestions du Libre et des professionnels, au niveau national et local. Contribuer aux développement de nouveaux outils et à ceux existant. C’est le but de notre association.
Cependant celle-ci manque encore trop de moyens, financier et humains.
Ruby n’est pas que le fameux framework web Ruby on Rails. C’est aussi :
- un framework dédié à la sécurité : Metasploit
- un framework dédié à l’administration système : Puppet
- un framework pour Asterisk : RAGI
- des bindings pour développer des applications desktop :
- Ruby-GNOME2
- QtRuby
- FXRuby
- Anvil (WxWidgets)
- Une multitude de bibliothèques de base : SGBD, SNMP, HTTP, FTP, SSH/SSL, SOAP, XML-RPC,...
- des frameworks pour les jeux vidéos :
- Une implémentation du protocole XMPP utilisé par Jabber : Jabber::Simple version simplifiée de XMPP4R
- Un serveur de Message oriented Middleware : Stomp
- Un dépôt d’archives comparable au CPAN de Perl : Ruby Application Archive
- Un dépôt de paquet indépendant du gestionnaire de paquet de l’OS : RubyGems
- Et bien sûr un excellent langage script complètement objet et très lisible.
Pour tout cela Ruby mérite d’être plus connu en France et en Francophonie. N’hésitez pas à adhérer, qui sait peut-être que cela poussera un jour votre entreprise à utiliser Ruby. Quant à celles qui l’utilisent déjà, nous acceptons volontiers votre adhésion.
ferret
J’ai relu il y a plusieurs semaines pour O’Reilly la traduction du shortcuts sur ferret. Ferret est une implémentation en Ruby/C de Lucene un moteur libre d’indexation de document en Java.
Ferret est vraiment un projet très intéressant car il permet d’indexer toutes types de documents provenant d’une base de données ou de fichiers. Il existe même un plugin pour Ruby on Rails : acts_as_ferret. Enfin Ferret propose un DSL très poussé permettant d’interroger simplement l’index via une multitude de critères.
La traduction de Jérémie Bordier est un modèle du genre et dépasse même la version originale. J’espère que la version française sortira ce mois-ci et je conseille à toutes personnes souhaitant indexer un volume important de documents de se le procurer.
focus : paye ton Mongrel
O’Reilly vient de publier un focus au format PDF sur l’installation et la configuration d’un serveur Mongrel. Ayant participé à la relecture du PDF je ne peux que vous confirmer la qualité de celui-ci. Mongrel est une réelle alternative au moisissant FastCGI, et il permet de plus de mettre en place très simplement un cluster.
Mongrel est un serveur applicatif permettant de mettre en place une architecture 3 tiers haute disponibilité. Pour 8€ ne vous privez pas :)
plugin Rails : resultset-autofilter
J’ai publié il y a quelques jours un plugin Rails permettant la génération automatique du condition d’un paginate à partir d’un formulaire : resultset-autofilter
Ce plugin sert aux développeurs devant créer un grand nombre de formulaires permettant de filtrer un tableau de données. Il est encore mal documenté, mais les retours et contributions sont les bienvenues. Il permet également de stocker dans l’objet en session le résultat des requêtes SQL servant à remplir un champs html select.
Ainsi lorsque l’utilisateur revient sur une page, le contenu du formulaire de recherche est restauré.
Exemple :
def index
filter(:connection_index) {|data|
@nbrfields = Filters_and_conditions.instance_fields(self, data) }
if @nbrfields == 0
h = {:view_products => Product.find_all.collect {|p| [ p.name, p.id ] } }
Filters_and_conditions.set_fields(self, :connection_index, h)
end
end
ici instance_fields instancie les objets en session, et s’ils n’ont pas été encore déclaré, ils le sont puis stockés dans l’objet en session.
def search
filter(:connection_index) {|data|
Filters_and_conditions.generate(self, params, data) }
render :partial => "list", :layout => false
end
La recherche ne consiste qu’en une seule ligne de code.
<%= resultset_filter(:page => :index,
:type => :select,
:model => :product,
:field => :id,
:filter => @view_products,
:js => {:onchange => "this.form.onsubmit()"})
Et on utilise un helper dans la vue. En plus du type ’:select’, il existe aussi le type ’:selectandinput’, qui génère un select proposant des critères de filtre tel que ‘commence par’ et ‘contient’ et un champ input attaché :
<%= resultset_filter(:page => :index,
:type => :selectandinput,
:model => :connection,
:field => :col2,
:filter => ResultsetAutofilter::ViewStringFilter,
:js => {:onchange => "this.form.onsubmit()"})
Ici ce helper permet de rechercher ce que l’utilisateur saisie dans le champs input, dans le champs col2 du modèle connection. :filter propose à l’utilisateur des critères de filtre (commence par, finir par, contient, etc).
Les types date et bool existent également mais pas encore documenté.
Apache2 mongrel rails
Depuis l’installation de mon blog, typo, sur ma dédibox, mon serveur web lighttpd plantait régulièrement. Rien dans les logs n’indiquait une quelconque piste.
J’ai donc décidé de migrer vers une config qui semble faire l’unanimité chez les Raileurs : Apache2 en proxy + mongrel.
En espérant que cela résout le problème ; cela m’étonne de lighttpd mais je n’ai pas le courage de fouiller plus loin.
Une petite doc sur la config en question, même si ma config est plus simple, n’ayant utilisé que les paquets Ubuntu : architecture web Apache 2 / Mongrel / Ruby on Rails sous Ubuntu.
Et un billet de Bounga à ce sujet, Déployer vos applications Rails avec Apache, Mongrel et Capistrano, pour les architectures ‘couillue’.
Rails : upgrade
Mise à jour de sécurité en 1.1.6, à vos gems.
Source : Rails 1.1.6, backports, and full disclosure
ps : changez le numéro de version dans le fichier config/environment.rb sinon votre site utilisera toujours la version antérieur …
ps2 : mise à jour de typo également.






