I’m sure you’ve heard of static site generators like Jekyll (Ruby) or Hyde (Python). The benefits are obvious - your site is hosted on a cheap shared hosting and it can easily survive the Digg/Slashdot/Reddit effect. There is no database latency - the browser requests a file on the server and gets it back immediately.
While I still use a static generator to power my site, it’s not a different engine. I got tired of launching a django server just to write a post. I wrote a new static site generator called Socrates. Each post is now a separate file written in Markdown. Socrates then runs through those files and creates a site for me. I’m still using django templates. What follows is the original post.
The site is a simple django blog. There is nothing really of note when it comes to django-specific coding. I run the django server locally when I’m editing or adding articles. It provides a nice UI. It also lets me easily preview the site without generating anything.
When I’m happy with the state of the website and want to publish it, I run the
static generator. It’s contained in the
generate.py file. It runs through
all possible urls and for each one it generates a static file. Each file is a
complete HTML page that the user’s browser will download. The folder structure
is as follows:
/2010/ /02/ post-one.html post-two.html /2011/ .. .. /about/ index.html index.html /page/ /2/ index.html /category/ /android/ index.html /code/ index.html ..
You get the idea. This way, with an
.htaccess file we can have the
following URL structure:
FTP deploy script
And the final piece is the
deploy.py script. It looks at the deploy
directory, and with a little help from git, it figures out what files were
changed since the last deploy. It then takes those files and throws them up on
the server. A normal shared hosting.
You can check out the code on Github.
This article was first published on January 22, 2011. As you can see, there are no comments. I invite you to email me with your comments, criticisms, and other suggestions. Even better, write your own article as a response. Blogging is awesome.