Zotonic: the Erlang Content Management System

It's more than just a CMS. Create complicated Web sites quickly with Zotonic.

Described by its authors as a pragmatic and modern CMS, Zotonic is that
and much more. When I started using Zotonic, it was because of its
efficiency and the fact that I could pack several client CMS sites
onto a machine with only humble resources. I soon discovered, however,
that Zotonic is not only a CMS, but also a Web framework, which allows
me to create very complicated Web sites in a fraction of the time
it would have taken me using more traditional languages and frameworks.
Zotonic won't fall over if it encounters an error, and it does not need to be
poked with a stick and awakened every time a request comes in.

Zotonic is written in Erlang, a functional language that was designed
for programming telephone switches. The logic behind using Erlang for Web
development is that modern Web sites, with their plethora of connections
from users and robots, are starting to look more and more like telephone
exchanges. “I have never programmed in a functional language, and
Erlang looks like Dutch to me!”, I hear you say. Well, the authors of
Zotonic are fluent in Erlang (and Dutch, incidentally), and they have done a
good job of creating a piece of software that is useful out of the box,
regardless of whether you know Erlang, and Zotonic could be just
the killer app you need to dive in and learn Erlang.

Another attractive feature of Zotonic is its PostgreSQL database (see
sidebar).
As someone who has toyed with learning Erlang
for a while, probably one of the big barriers was that on top of learning
a completely new programming paradigm, I also would have to learn a
new database in the form of mnesia. Zotonic's use of PostgreSQL means
one less new thing to learn and at least allows me to feel in familiar
territory when I am designing my data.

Note:

The only database offered by Zotonic at the moment is PostgreSQL;
however, there are plans to create “Elastic Zotonic”, which
will use a
distributed store. Although Zotonic does use a relational database,
in most cases, what you are inserting into the database will be a
Zotonic resource with a key (ID) and a document (Props). Relationships
between resources are defined using predicates, such as has_relation and
has_part. For a lot of Web development, this is all you need; however, if
you do need it, the power of the relational database is available to you.

Update:

As it stands, the default Zotonic branch is under heavy development, and
installation instructions have changed slightly from the time this article
went to press. You can clone the 0.6
version instead using hg clone -r release-0.6.x
https://zotonic.googlecode.com/hg/ zotonic. If you want to live
on the edge,
see the new instructions for the default
branch: code.google.com/p/zotonic/source/browse/doc/INSTALL.

You also can check out the very active Zotonic Google group if you need
further help.

Dependencies

I am running the latest version of Ubuntu, which has Erlang
preinstalled. You can test whether you have Erlang by typing
erl at the
command line. If you get the Erlang shell, you are good to go. Press Ctrl-c,
followed by the letter a and carriage return to exit Erlang. If you don't have
Erlang on your system, you can download it from the Erlang Web site or
install it with your distribution's package manager.

Another dependency is ImageMagick; to check whether it's installed, run:

convert -version

You, of course, need to have PostgreSQL installed, and you need
Mercurial installed to fetch the latest version of Zotonic from the
Google code site.

Zotonic comes complete with an example site, which implements a simple
blog. You can find the code for this default site in priv/sites/default/,
and you can get this default site running by creating a config file and
starting Zotonic.

Find the sample config file in priv/sites/default/config.in, and rename
it or create a copy with no extension:

cp priv/sites/default/config.in priv/sites/default/config

Open config in your favourite text editor, and modify it to use the
database you just created:

Instead of ctrl-C + abort, the faster and cleaner way out of the erlang interpreter command prompt >:
q().
Kind of like typing quit() at a python interpreter command prompt, but shorter and ending with a period/full stop. (Don't all good sentences end with a period? They do in Erlang.)

Sponsored by:

Webinar: 8 Signs You’re Beyond Cron

Scheduling Crontabs With an Enterprise Scheduler
11am CDT, April 29th

Join Linux Journal and Pat Cameron, Director of Automation Technology at HelpSystems, as they discuss the eight primary advantages of moving beyond cron job scheduling. In this webinar, you’ll learn about integrating cron with an enterprise scheduler.