Requirements
- Ruby framework. Pages maintained in git.
- Generated paths_that_are_built/from_the_directory_and/file_names.html. Or similar.
- Web page should either not have an extension or should be same as online format used, e.g. html.
- Support for textile, html, or redcloth.
- Automatic parsing based on the filename extension e.g. file_name.textile.
- Support for querying pages to automatically build menus.
- Support for tagging metadata and for querying pages by tag.
- Atom/RSS feed. RSS feed required if want to use Tapir search service.
- In-file metadata.
- Flexible templating, without depending on a particular front-end framework for e.g. CSS layout.
- ERB support.
Conclusion
Nanoc wins. It seems to do everything I need.
Nesta not a static site generator! Jekyll too limited. Webgen a mystery. Webby not maintained, recommends nanoc.
Shortlist
- Nesta. I realised this isn’t actually a static site generator, so it’s no longer in the running!
- Jekyll
- Webgen
- Webby
- Nanoc
Nesta
Damn!.. After reviewing I just realised it doesn’t actually generate static files - you have to run it via the shotgun server (i.e. via Sinatra).
- Built on top of Sinatra. Doesn’t use git, but that doesn’t stop me using it - I could have a post-update hook that auto deploys on commit.
- Does build the URL from the directory and file names.
- Does not use an extension in URLs.
- Supports textile and markdown. Docs don’t mention html so can only assume it isn’t supported.
- Does automatically parse based on the file extension.
- Menus specified manually. Does have support for category pages that are auto-built.
- Can tag pages via “categories” metadata. Category pages are built automatically.
- Automatically creates an Atom feed from pages that have a date (aka “articles”).
- Does support in-file metadata.
- Uses haml templates. Does not force a particular front-end framework. Can create your own themes.
- Can use any templating engine supported by Sinatra, so can configure to use ERB.
Additional: Docs suggest it’s a lot less powerful than Webby, but it is built on Sinatra so it is presumably very powerful.
Jekyll
https://github.com/mojombo/jekyll
https://github.com/mojombo/jekyll/wiki/Usage
Lots of deal breakers:
- Requires particular file name format.
- Uses Liquid. No ERB. I don’t want to learn Liquid nor work around its limitations. See http://www.neat.io/posts/2008/12/27/overview-of-jekyll–a-static-site-generator-written-in-ruby.html.
- Limited functionality.
- It’s restricted - no plugin architecture, have to fork to extend. http://starrhorne.com/posts/howto_build_a_blog_with_nanoc/
Pros:
- A good choice for web sites related to a GitHub project, as they pipe commits to GitHub Pages through it. See http://www.neat.io/posts/2008/12/27/overview-of-jekyll–a-static-site-generator-written-in-ruby.html
Webgen
http://webgen.rubyforge.org
Documentation is terrible - there’s a fair amount of it but I found it convoluted to the extent that it makes the application look complex beyond its capabilities.
- Is built on Ruby. Doesn’t use git, but that doesn’t stop me using it - I could have a post-update hook that auto deploys on commit.
- Does generate paths from directory and file name. Configurable.
- Pages are given .html extension. Configurable.
- Docs suggest textile is supported. Not sure about html or redcloth. TODO: Is html supported?
- Source pages have to have .page extension. Parsing based on ???
- Has a menu generator. Docs imply very inflexible templating.
- No mention of tags/categories in metadata reference. http://webgen.rubyforge.org/documentation/reference_metainfo.html
- Docs suggest support for feeds via an extension, but don’t know details as frankly I’m sick of trawling through them.
- Does have in-file metadata. No custom metadata.
- Provides default templates. Can create custom templates (AKA Website Style Bundle).
- Does have ERB support. Also provides webgen tags.
Webby
Not under active development. Recommends nanoc.
http://webby.rubyforge.org/
http://clarkware.com/blog/2008/08/06/building-static-websites-with-webby#Webby
- Is built on Ruby. Doesn’t use git, but that doesn’t stop me using it - I could have a post-update hook that auto deploys on commit.
- Does build the URL from directory and file names. Can override URL in-page.
- The user manual says that it’ll use the extension of the file and can override in-template and in-page. However, a intro vid at http://www.youtube.com/watch?v=PgCgyx2pXHU suggests that .html extensions are used by default.
- Supports textile and html. The textile filter required the redcloth gem, so this may in fact be redcloth support instead.
- Does not automatically detect filename extension to determine filter. Have to define in-page.
- Can query pages to build menus.
- Can create any metadata and search pages by it.
- Can generate feeds.
- Does have in-file metadata.
- Provides a few layouts by default, based on Blueprint, but not compulsory. You can add your own.
- Does have ERB support.
Extras:
- Can auto update output when file saved.
- Deploys via rsync.
Nanoc
http://nanoc.stoneship.org/
Their web site crashes my browser so I can’t review. Update: It turned out Firefox was crashing due to a font handling bug. I mirrored the site and removed the assets/fonts directory which allowed me to view the site locally.
- Is built on Ruby. Doesn’t use git, but that doesn’t stop me using it - I could have a post-update hook that auto deploys on commit.
- Does build the URL from directory and file names.
- Nanoc may create all pages as index.html inside their own directory. TODO: What extension is generated?
- Supports redcloth, which I believe handles Textile and Markdown. Docs have no mention of HTML. TODO: Test whether HTML can be used.
- Requires rules that tell the system which filters to use for which files, but you can define a case statement that switches by filename extension to use different filters.
- Can query items to build menus.
- Support for tagging metadata, with a helper provided by nanoc to work with them. Can use API to query pages by tag.
- Has helper for creating Atom feed. Would have to write my own helper (or nab someone elses) to create an RSS feed.
- Does have in-file metadata.
- Does have flexible templating.
- Uses ERB for templating.
Extras:
- Can define routing rules to point URLs to particular pages, prevent URLs loading anything (e.g. if you had a store of links used by another page) or do a number of other nifty things.
- Deploys via rsync.