Vous reprendrez bien un peu de lourd ?
DISCLAIMER : Ceci est un post à haute teneur en troll.
Redmine est de loin le meilleur outil web multiprojet pour le développement que j'ai pu utiliser en opensource. De plus il a l'avantage de bien s'interfacer avec mercurial, git et autres (D)VCS, parfait non ? Oui mais voila redmine pose plusieurs soucis :
- les dépendances a des versions très précises : rack 1.0.1 (pas 1.0 ni 1.1.0 mais uniquement 1.0.1) par exemple mais beaucoup d'autres comme ça.
- la surconsommation de ruby dès qu'il s'agit du web (je sais il existe REE pour ça mais quand même) j'ai testé thin, passenger, etc et dans tous les cas j'obtiens un gros ogre jamais rassasié de manger toute ma RAM.
Si en plus on rajoute les contraintes suivantes :
- pas d'accès internet sur les machines de prod,
- il faut pouvoir redéployer toutes les installations de façons simple et automatique.
Et bien déployer du ruby deviens tout de suite peu évident. Je précise que j'ai une faible connaissance du ruby et de son écosystème, ce qui n'aide pas. Or j'ai bien l'impression que c'est un sujet qu'il faut suivre de près si l'on si l'on veut pouvoir réellement l'utiliser efficacement en production.
Je ne vais tout de même pas m'arrêter là, cet outil répond au besoin, il faut donc trouver un moyen de l'installer et répondant aux contraintes.
C'est là que je tombe sur jruby, je me renseigne dessus et apprend que des applis rails de type redmine peuvent tourner sur des serveurs d'application java de type tomcat ou jetty par exemple et que les performances seraient plutôt bonnes. C'est peut être une bonne piste pour les performances, mais il reste la problématique de la reproductibilité de l'installation sur des machines sans accès à Internet.
Un peu de recherche et je tombe sur warbler ce petit outil me permettrai de pouvoir fabriquer un war (donc un package déployable sur un serveur d'application java) embarquant tout le nécessaire du monde ruby, plutot pas mal.
Je me lance donc, je prend une machine ChiantOS (oui la pire des contraintes c'est que ça doit tourner sur du chiantos :(), j'installe l'openjdk et j'installe jruby.
j'ai plus qu'à installer tout le nécessaire pour redmine :
$gem install rails -v=2.3.5
$gem install jruby-openssl warbler activerecord-jdbcpostgresql-adapter
Je fais une installation classique de redmine (je choisi la 0.9.4 là dernière au moment de ce post) je configue tout normalement, j'applique le patch pour le support de jruby 1.5.0
Attention dans le fichier config/database.yml il faut bien faire attention de précéder le nom du driver par jdbc :
adapter: postgresql devient adapter: jdbcpostgresql
Dans le répertoire redmine, taper :
$warble config
il faut maintenant éditer le fichier config/warble.rb générer :
embarquer les gems utilisées dans le war :
config.gems+= ["activerecord-jdbcpostgresql-adapter", "rack"]embarquer tous les fichiers :
config.dirs = %w(app config lib log vendor tmp extra files lang)
il suffit maintenant de générer le fichier war :
$warble
il doit avoir créé un fichier redmine.war qui embarque tout le nécessaire, il ne reste plus qu'à le déployer dans votre serveur d'application java de choix.
Dans mon cas j'ai choisi jetty.
Le résultat est surprenant, sur la même machine, redmine semble être boosté aux amphétamines et la consommation mémoire toujours élevée est quand même très largement réduite, par rapport au ruby classique.