Débuts avec Nanoc
Nanoc est un outil de publication de sites statiques écrit en Ruby. Ca permet de structurer facilement un site statique : définir un layout, gérer du contenu (un peu) dynamique, formatter ses pages avec Markdown ou Textile, etc.
Vous êtes invité à suivre les docs Installing nanoc et Getting started si vous voulez essayer nanoc.
En bref dans un environnement RVM-isé:
rvm use 1.9.2@nanoc --create gem install nanoc adsf nanoc create_site blah cd blah nanoc compile && nanoc view
Et ouvrez dans votre navigateur préféré http://localhost:3000
Evidemment, rien n’interdit en production de gérer ces gems avec bundler
dans un Gemfile
.
Première chose qui m’a déplu, nanoc transforme tout content/blah.html
en output/blah/index.html
. Ca fait peut-être plus joli
dans la barre d’adresse du navigateur, mais mes fichiers s’appellent tous index.html, ça rend notamment les copies avec scp
illisibles. Ce
comportement est géré dans une “route” du fichier Rules
à la racine de votre site :
route '*' do item.identifier + 'index.html'
Que vous pouvez changer en :
route '*' do if item.identifier != "/" && item.attributes[:extension] == "html" item.identifier.gsub(%r(/$),'.html') else item.identifier + 'index.html' end
Je ne sais pas si c’est la méthode recommandée, mais ça fonctionne à première vue.
Autre chose, autrement plus gênant, comment gérer votre contenu vraiment statique (par exemple des images) ? Vous allez vite vous rendre compte si vous
mettez une image à la racine de votre site qu’il refuse de compiler, indiquant que blabla.jpg
n’est pas un fichier ERB
valide. Pour résoudre ça, j’ai choisi de me faire un dossier content/assets/
dont les fichiers seront copiés tels quels dans
output/assets/
, sans compilation ni filtrage. Voici les règles à insérer dans votre fichier Rules
(attention, l’ordre ayant une
importance, chacune a été placée au dessus de la règle “*” correspondante). Pour la règle de compilation :
compile '/assets/*' do # don't filter or layout
Et pour celle de routage :
route '/assets/*' do item.identifier.gsub(%r(/$),'.')+item.attributes[:extension]
A suivre…