mecker. mecker. mecker.

nanoc – ein CMS mal anders

Ich bin ja absolut kein Freund von Content-Management-Systemen. Die haben Features, die ein nor­mal­sterb­li­cher niemals brauchen wird. Die sind grund­sätz­lich langsam, weil ja jedes Mal ir­gend­et­was dynamisch generiert werden muss – und wer hat schon FastCGI auf seinem Webserver kon­fi­gu­riert?

Wieso eine Nut­zer­ver­wal­tung, wenn ich eh alleiniger Autor bin? Wieso muss da jedes Mal ein Skript durch­rech­nen, wenn der Content identisch ist? Wieso po­ten­zi­el­le Lücken öffnen, weil man es doch so gerne dynamisch haben möchte. MySQL und Co erschweren es extrem, „mal eben“ etwas lokal zu testen. Ich nutze meinen Webserver ungern für’s Testen.

Das bringt uns zu nanoc: „nanoc is a Ruby web publishing system for building small to medium-sized websites.

Konzept

Nanoc ist wie eine Art make für Webseiten. Zuerst lässt man es eine Grund­struk­tur erstellen, die hinterher von nanoc gelesen und ver­ar­bei­tet werden kann. Die Grund­struk­tur sieht so aus:

% nanoc create_site newsite
newsite/
|-- config.yaml
|-- content/
|   |-- index.html
|   `-- stylesheet.css
|-- layouts/
|   `-- default.html
|-- lib/
|   `-- default.rb
|-- output/
|-- Rakefile
`-- Rules

Der Inhalt und dessen Sei­ten­struk­tur wird in content/ mittels Text­da­tei­en und Ordner erstellt. So wird z.B. aus content/test/hello.html im output/test/hello (/index.html). Inhalt und Layout sind dabei strikt von­ein­an­der getrennt.

Jede Seite kann Me­tain­for­ma­tio­nen über YAML enthalten:

---
title: "API Reference"
Category: Documentation
---

Über ein­ge­bet­te­tes Ruby (eRuby) innerhalb des HTML-Templates layouts/default.html kann dann auf die In­for­ma­tio­nen zu­ge­grif­fen werden und so das Template in­di­vi­dua­li­siert werden: Beispiel (Zeile 6).

Um nicht mühsam plain-HTML schreiben zu müssen, kann jede Seite durch einen Filter laufen, der den Text trans­for­miert und so z.B. Markdown (kramdown in Ruby) oder vielleicht re­Struc­tu­red­Text als Markup Sprache ermöglicht.

Die Rules-Datei dient dazu, in der Datei vor­de­fi­nier­te Regeln auf die Ausgabe anzuwenden. So kann z.B. für jeden Un­ter­ord­ner in content/ ein eigenes Layout definiert oder eine andere Markup Sprache genutzt werden.

Do-It-Yourself

Das war jetzt alles recht abstrakt, kommen wir zum Tool selbst:

Die In­stal­la­ti­on von nanoc ist einfach: man holt sich ruby und rubygems und tippt dann gem install nanoc. Wer das in /usr/bin/ in­stal­liert haben möchte, sollte das als root laufen lassen.

Eine Website wird mit nanoc create_site mysite erstellt. Für mehr Komfort bietet nanoc einen Webserver, der auf http://127.0.0.1:3000 läuft (via adsf). Den kann man gleich mal im screen oder im bg starten: nanoc view &.

Gerendert wird mittels nanoc compile und schon kann man eine (schicke) default Seite betrachten. Auf den Webserver muss dann nur noch alles in output/ hoch­ge­la­den werden. Mehr ist es nicht. Mein An­wen­dungs­fall lässt sich hier „be­stau­nen“.

diverse Links

blog comments powered by Disqus