(nota: j'ai commencé à rédiger ce billet début Août mais viens juste de le relire et de lui donner le BAT, certaines des infos sont donc probablement périmées)

Redmine est un gestionnaire de projets en ligne qui offre de nombreuses fonctionnalités:

  • une seule instance de redmine permet de gérer plusieurs projets; chaque projet a sa propre configuration (modules activé, rôles des utilisateurs, etc) et on peut créer des sous-projets (quoique je n'ai pas encore trouvé comment adapter cette fonctionnalité à mes besoins). Les projets peuvent être publics ou accessibles uniquement à leurs membres;
  • il peut s'interfacer nativement avec de nombreux gestionnaires de sources: SVN, CVS, Git, Mercurial, Bazaar, Darcs...
  • en plus des modules présents nativement dans Trac (wiki, suivi de tickets), Redmine offre aussi des diagrammes de Gantt (miel pour attirer les chefs de projet), la possibilité de suivre le temps passé sur les tâches et de faire plein de rapports (idem), un gestionnaire de documents amélioré, des forums...
  • il est multilingue;
  • il peut gérer les utilisateurs en se connectant à un annuaire LDAP;
  • tout est administrable en ligne, via un "back office";
  • et bien plus;

Plutôt alléchant ! Trac, et c'est une de ses forces, dispose de centaines de plugins qui élargissent son domaine d'action bien au delà de ce que fait Redmine pour l'instant, mais le fait de disposer d'autant de fonctionnalités nativement est un confort appréciable.

Du côté des "risques" à l'adopter dès aujourd'hui, je citerai :

  • sa relative jeunesse : je n'ai cependant pas encore rencontré de soucis notable avec la version actuelle, étiquetée 0.7.3
  • conséquence de sa jeunesse, il dispose pour l'instant de beaucoup moins de modules additionnels que Trac. Si vous avez un besoin qu'il ne satisfait pas nativement, vous aurez moins de chance de trouver votre bonheur parmi les plugins.
  • RoR : il est basé sur le framework Ruby on Rails. Ce qui n'est pas un défaut, loin de là, mais les compétences sont encore peu nombreuses, et votre administrateur pourra rechigner à installer un nouvel environnement qu'il ne maîtrise pas. L'installation elle-même n'est pas forcément triviale;
  • l'intégration avec Mylyn laisse encore à désirer. Elle est possible via le connecteur générique, mais j'ai pour l'instant butté sur un problème de certificat auto-signé de mon site[1]. Un connecteur spécifique est en cours de développement, mais pas encore en version alpha, donc je ne l'ai pas testé;

Première impression

Première déconvenue en me rendant sur le site de Redmine: là où Trac faisait dans le rouge et le gris sombre, Redmine est résolument bleu. Or je déteste le bleu. Hop, fin de l'expérimentation de Redmine, je retourne à mon Trac.

(après une nuit de galère à installer le bouzin, je me dis que j'aurais mieux fait de m'en tenir à cette première impression :-S)

Installer Redmine sur Debian Lenny

Je ne vais pas faire un guide d'installation complet, car j'ai tant galéré que je ne suis pas trop sûr des manipulations qui ont conduit le machin à fonctionner.

Il n'existe pas encore de version packagée pour Debian de Redmine. Il faut donc tout faire à la main: installer les dépendances, télé-charger l'application, deviner où l'installer, faire des chown et les chmod qui vont bien... Rien de compliqué, mais ça rappelle que le logiciel est encore en phase de développement, même s'il semble plutôt stable et utilisable.

Premier problème, la version stable actuelle (0.7.3) présente une incompatibilité avec Ruby 1-8-7 présent dans Lenny. Il faut patcher un fichier, comme expliqué dans ce thread, pour supprimer un message d'erreur :-S. Ceci fait, on se retrouve avec une application qui fonctionne à peu près.

Sauf que manifestement les applis Rails aiment bien leur autonomie, et se promènent avec leur propre serveur web. Ainsi Redmine tourne tout seul via le serveur WEBRick qui écoute sur le port 3000. Sympa, mais j'ai un Apache qui tourne sur la machine, et pas trop envie de multiplier le nombre de serveurs, de ports ouverts, etc. Et c'est là que la galère a vraiment commencé: comment faire fonctionner Redmine avec Apache ?

Apparemment, plusieurs possibilités s'offraient à moi:

  • utiliser mod_proxy pour rediriger les requêtes vers WEBRick. Mais en l'occurrence je voulais me passer de WEBRick;
  • les seules autres documentations que j'ai trouvées concernaient l'utilisation d'Apache comme load balancer devant Mongrel. Mongrel est un autre serveur Web écrit en Ruby. Là encore, ce n'est pas ce que je voulais faire;
  • en utilisant mod_rails, aka Passenger. L'installation paraissait simple, un simple gem install passenger[2], mais celui-ci a quasiment planté mon serveur. Après quelques recherches, il s'avère que gem est extrêmement gourmand en mémoire, et que même en arrêtant tous les autres services, les 256Mo de ma part Gandi n'étaient pas suffisant[3]. Hop, suivant;
  • utiliser Redmine en CGI. C'est la solution sur laquelle je me suis rabattue dans un premier temps (fast-cgi pour être précis);

Installation en (fast) CGI

  • installer les paquets qui vont bien, en l'occurrence le module apache libapache2-mod-fastcgi et les bibliothèques fast-cgi pour Ruby : libfcgi-ruby1.8.
  • configurer Apache: dans le cas d'un vhost, il faut faire pointer la racine du site vers le répertoire public de redmine, et autoriser la lecture du .htaccess situé dans ce répertoire:
DocumentRoot /var/www/redmine/public
<Directory "/var/www/redmine/public">
  AllowOverride All
</Directory>
  • configurer Redmine
    • dans le fichier config/environment.rb dé-commentez ou ajoutez la ligne
ENV['RAILS_ENV'] ||= 'production'


** dans le répertoire public, renommez ispatch.fcgi.example en dispatch.fcgi et rendez-le exécutable.

Et c'est tout ! Oui, au final ça a l'air tout simple et rien ne justifie les heures que j'y ai perdues, si ce n'est mon ignorance crasse de la vie du Rails, et le manque de documentation.

Avec mod_rails

Après quelques jours d'utilisation, le cgi ne semblait ni très réactif, ni très stable, avec des plantages réguliers dans les logs, se traduisant par des erreurs 500 aléatoires sur le site. Sur les conseils d'un camarade de bac à sable, j'ai alors re-tenté d'installer mod_rails. Après quelques recherches sur les forums, j'ai trouvé une astuce pour réduire la consommation mémoire de gem: l'appeler avec l'option -B 1000000. Nouvelle tentative, le serveur ne plante pas, l'install va un peu plus loin, et se plante en signalant l'absence de mkmf. apt-file search mkmf.rb, apt-get install ruby1.8-dev, gem install passenger -B 1000000, wéééé, joie, ça passe, ça marche, et le résultat semble bien plus rapide et stable qu'en CGI, hop, adopté.

A l'usage

Le principal défaut de Redmine est simple à corriger, la création d'un thème avec une simple CSS supprime le bleu. Et ensuite... Ensuite il faudrait que je l'utilise pour de vrai, sur un vrai projet, pour vraiment l'évaluer. Comme Couac est en sommeil en ce moment, va falloir que je teste sur des projets pros (histoire que les heures que je perds chaque jour à vendre mon corps servent à quelque chose), donc que je convainque Chef de me laisser l'installer et migrer un projet dessus. Chef, toi dont le ramage du plumage est à l'image de l'hommage...

Notes

[1] oui je sais il suffit d'importer le certificat dans Eclipse, j'ai trouvé une doc sur le sujet

[2] gem est le gestionnaire de paquets de Rails, l'équivalent par exemple de la commande pear pour PHP

[3] gem essaie de télécharger et de monter en mémoire la liste de tous les paquets existants, et vu la vitalité de la communauté Rails, ça fait un paquet de monde