Review of Ruby static CMS / site generators

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.

Last modified: 21/08/2011 Tags: (none)

This website is a personal resource. Nothing here is guaranteed correct or complete, so use at your own risk and try not to delete the Internet. -Stephan

Site Info

Privacy policy

Go to top