Need a wiki ?
Posted by JB on 24/05/09 at 08:57
En ce moment j’ai trop d’articles techniques à publier, souvent trop en bazar, ou trop long pour être publiés dans une demi-colone de ce blog. De plus je risque de quitter mon boulot dans quelques mois, et tout ce que j’ai pû documenter là-bas sera perdu pour moi si je ne le récupère pas avant. Bref, j’ai besoin d’un wiki, simple d’utilisation, avec suivi des révisions, formatage en Textile, un peu comme celui de Remine.
Une contrainte supplémentaire, qu’il soit en Ruby on Rails, éventuellement Merb. Pas par idéologie, croyance en REST, ou quelconque connerie de ce genre (et certains en tiennent une couche à ce niveau quand on voit la liste rails-france), mais plutôt parce que j’en ai marre de maintenir 50 technos hétérogènes sur mon serveur. Mon blog, mon gestionnaire de projets tournent déjà en Rails. Ce sera bientôt le cas du site chanmasters.com que je réécris en ce moment. Bientôt le cas également de ma gallerie de photos, qui tourne déjà avec des scripts ruby mais pas administrable en mode web. Donc dommage pour Dokuwiki qui a priori me convenait parfaitement…
J’ai essayé Instiki sans être réellement convaincu, je ne saurais pas bien expliquer pourquoi. Et puis, j’aurais des modifs à faire dessus pour qu’il me convienne (templates trop épurées à mon goût, affichage “geeky” de certains champs, etc…). Ce qui implique un petit peu d’exploration du code, cf la suite. Je n’ai pas trouvé d’autres projets très actifs en Rails et qui me convienne (liste ici)…
En fait, le wiki de Redmine me convient parfaitement. Facile à “hacker” (je commence à connaître un peu le code même si je suis loin d’être un gourou comme les 3 ou 4 grands contributeurs réguliers), maintenu, communauté active, support de textile entre autres, jolis diff, etc. Nickel, à 4 petites choses près :
- le support Textile est un peu foireux parfois ; voir ici
- la coloration syntaxique est hideuse, j’aimerais bien remplacer CodeRay par autre chose ; voir ici
- j’aimerais bien que les hiérarchies soient faites automatiquement, quitte à rendre l’arborescence un peu profonde, pas grave ; voir ici
- j’aimerais bien un système de tags avec un nuage sur le côté ; voir ici, ici et ici
Bref, ça sent bon, et le choix est tout fait ; je documenterai dans le prochain article l’installation et la configuration de Redmine pour me servir de wiki :-)
Redmine as a wiki engine
Posted by JB on 24/05/09 at 10:27
Ce post fait suite à celui-ci.
Tout d’abord, on installe Redmine classiquement ; je passe volontairement les aspects DNS (création d’un sous-domaine, en l’occurence wiki.jbbarth.com), Apache (création du vhost), et “système” (script de démarrage de Mongrel, user et port adéquats, ce genre de choses) :
cd /home/app/jbbarth/ svn co http://redmine.rubyforge.org/svn/trunk _redmine-0.8-wiki ln -s _redmine-0.8-wiki wiki cd wiki/ rake db:migrate rake redmine:load_default_data rake config/initializers/session_store.rb
Après démarrage, on procède à une configuration basique de Redmine :
- modification du user/pass admin
- configuration générale dans Administration > Settings
- création d’un projet public “wiki”, identifiant “wiki” ; tous les trackers décochés, et tous les modules sauf le module “wiki”
- dans ce projet, on configurera la “Start page”, et surtout on la créera/remplira (sous peine d’avoir des erreurs 404 dans la suite)
Là commencent les choses “sérieuses”. Que voulons-nous ?
1) que l’accueil de Redmine se fasse sur la page de démarrage du wiki du projet “wiki”
Pour cela, nous allons éditer config/routes.rb, et remplacer l’accueil défini à la ligne “map.home” par :
#map.home '', :controller => 'welcome' map.home '', :controller => 'wiki', :id => 'wiki'
Après redémarrage de l’instance, ça fonctionne !
2) suppression des liens inutiles pour un wiki ; en particulier la première tab “Overview/Aperçu”, et “Projects/Projets”, “My page/Ma page” et “Help/Aide” dans le menu en haut à gauche (nous n’aurons qu’un seul projet “wiki”)
Pour cela nous allons créer un thème à nous et cacher ces liens via du CSS, ce qui me parait bien suffisant : ils ne représentent aucun “danger”, c’est juste qu’ils perturbent la navigation dans le cadre d’une utilisation wiki-only. Voir donc ici pour la création d’un nouveau thème, et éventuellement ici pour des exemples de thèmes.
Nous créons donc un thème “wiki”, puis quelques lignes suffisent à la fin de public/themes/wiki/stylesheets/application.css :
/* Specific to wiki */
#top-menu .my-page, #top-menu .projects, #top-menu .help { display:none; }
#main-menu .overview { display:none; }3) passage des patches cités dans l’article précédent
cd /home/app/jbbarth/wiki/ mkdir patches
a) passage de CodeRay à UltraViolet :
wget -P patches http://www.redmine.org/attachments/download/1698/syntax_highlighting.diff patch -p0 < patches/syntax_highlighting.diff wget -P patches http://www.redmine.org/attachments/download/1699/redcloth.diff patch -p0 < patches/redcloth.diff wget -P patches http://www.redmine.org/attachments/1700/ultraviolet_highlighter.zip cd patches/ unzip ultraviolet_highlighter.zip cat ultraviolet_highlighter/README.txt apt-get install libonig-dev gem install ultraviolet cp -a ultraviolet_highlighter ../vendor/plugins/ cd ..
Les traductions ne sont pas bien passées, donc on édite à la main config/locales/en.yml et fr.yml, et on supprime les fichiers “.rej” correspondants.
b) pages parent automatiques :
wget -P patches http://www.redmine.org/attachments/download/2082/3108_automatic_parent_with_tests.diff patch -p0 < patches/3108_automatic_parent_with_tests.diff
c) correction d’un petit bug de Redcloth :
wget -P patches http://www.redmine.org/attachments/download/1728/redcloth_arobas.diff patch -p0 < patches/redcloth_arobas.diff
d) système de tagging :
Il y avait un patch proposé ici, mais il ne correspond pas vraiment à ce que je veux. Voici quand même une méthode pour l’appliquer sur une copie de travail SVN :
wget -P patches http://www.redmine.org/attachments/download/2060/wiki_page_categories_20090520.patch sed -i -e 's#- redmine.orig/#- #g' -e 's#\+ redmine/#+ #g' -e 's#diff.*\.orig/\([^ ]*\).*#Index \1\n===============================================#g' patches/wiki_page_categories_20090520.patch patch -p0 < patches/wiki_page_categories_20090520.patch rake db:migrate
Après toutes ces modifs, on se rend compte que certains patches ne sont pas bien passés :
find . -iname "*.rej"
Normalement avec cet ordre de passage des patches, il n’y a que lib/redcloth3.rb dont on résoud les conflits à la main.
Voilà, hormis le système de tagging on a un wiki fonctionnel. Je ferai un nouveau post si je trouve quelque chose pour le support des tags. Il ne reste plus qu’à le remplir maintenant !
EDIT
- pour que l’activité du projet prenne en compte les changements du wiki par défaut : éditer lib/redmine.rb, et modifier autour de la ligne 155/156:
- activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false + activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => true
- la même option permet que les recherches prennent en compte les entrées du wiki sur le projet courant
- pour cacher la liste déroulante de sélection des projets dans la recherche : édition de public/themes/wiki/stylesheets/application.css, ajout de :
select#scope { display:none; }EDIT2
J’ai changé l’ordre de passage des patches pour avoir le moins de choses possibles à résoudre à la main.