The zotonic command

The zotonic command runs a number of utility commands which all operate on a Zotonic instance.

The zotonic command lives in the bin/ folder of the Zotonic source. Putting this path into your PATH variable makes working with Zotonic a lot easier:

export PATH=$HOME/zotonic/bin:$PATH

The command determines where the Zotonic base dir is by looking at its path; it always assumes that its zotonic basedir is one dir up from where the binary itself is.

Currently, the following subcommands are implemented:

zotonic start
Start the background Zotonic server instance.
zotonic stop
Stop the background Zotonic server instance.
zotonic debug
Launch the Zotonic server interactively and get an EShell on the running instance. See The Zotonic shell. The command in the root folder is a shortcut for this command.
zotonic restart
Restart the background Zotonic server instance.
zotonic update
Update the server. Compiles and loads any new code, flushes caches and rescans all modules.
zotonic shell
Get an EShell on the running instance. See The Zotonic shell.
zotonic addsite [options] <site_name>
Creates a new site with [site_name] as its name. See The zotonic addsite command for a full overview of this command.
zotonic modules <subcommand> [options]

Manages modules. It has the following subcommands:

install <module> [module2, ...] Installs a module from the repository into your Zotonic instance. The module will be checked out using source control (either git or hg) into the priv/modules folder.

uninstall <module> [module2, ...] Uninstall a module

activate <module> [module2, ...] Activate a module

deactivate <module> [module2, ...] Deactivate a module

update <module> [module2, ...] Update a module

restart <module> [module2, ...] Restart a module

reinstall <module> [module2, ...] Reinstall a module

list List all modules available on the Zotonic Module Repository

search <query> Search for a module

subcommand options:

--version show program’s version number and exit
-h, --help show this help message and exit
-z ZMR, --zmr=ZMR
 Zotonic modules repository
-s SITE, --site=SITE
 affected Zotonic site
-d, --debug enable debugging
-n NODE, --node=NODE
 Zotonic Erlang node
zotonic copysite [site_name] [source_server]

Copy [site_name] and its database content from the [source_server] over SSH and load its content into the filesystem and database of the local machine. You will need to have created the database zotonic_[site_name] for this to work.

Warning: This command will reset the content of the database to the content retrieved from the [source_server]. It does, however, generate and output a restore file in case this was run by accident and explains how to recover.

zotonic createdb [site_name]

Create a database called zotonic_[site_name] with the basic setup in place to host a Zotonic datastore. This script will likely need to be run as postgres unless zotonic has been granted CREATEDB in postgres as follows:

zotonic sitedir [site_name]
Get the absolute path for a site based on [site_name]
zotonic snapshot [site_name]

Take a version control snapshot of [site_name] including its database content.

This works differently from mod_backup in that it consistently uses the same filename for the SQL backup to make revision-based full site rollbacks possible.

zotonic update
Update the server. Compiles and loads any new code, flushes caches and rescans all modules.
zotonic compilefile [files...]

Compiles and reloads a single Erlang module within the Zotonic folder. This runs very fast and works very well on a save-hook of your text editor. In Emacs, it would be called like this:

(add-hook 'erlang-mode-hook
      '(lambda ()
         (add-hook 'after-save-hook '
                   (lambda ()
                     (call-process "/path/to/your/bin/zotonic" nil "*scratch*" nil "compilefile" buffer-file-name)
zotonic logtail
Starts a tail -F on the three Zotonic log files, console.log, error.log and crash.log

Legacy script

For archival purposes, the script that was used before release 0.8 is listed here.

# Copyright 2009 Marc Worrell
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# See the License for the specific language governing permissions and
# limitations under the License.
## usage {debug|start|stop|restart}
## Use "debug" to start an interactive shell (highly recommended when installing the db on the first run).
## Use "start" in production. This boots zotonic in an erlang vm with a heart beat process.
## The proposed directory structure is:
## /home/zotonic/                         -- this script
## /home/zotonic/zotonic/...                        -- the zotonic code
## /home/zotonic/zotonic/priv/sites/default/...     -- your site and uploaded files go here

# Change this to your base directory

# Change this to the complete path to (this script)

# Change this to the directory where you have unpacked zotonic
# IMPORTANT: this directory must be called zotonic or zotonic-x.y where x.y is the version number.

# Change this to point to the erlang vm

# The include path for the erlang vm, add when needed for your application.
PA="$ZOTONIC/ebin $ZOTONIC/deps/*/ebin $ZOTONIC/modules/*/deps/*/ebin $ZOTONIC/priv/modules/*/deps/*/ebin $ZOTONIC/priv/sites/*/modules/*/deps/*/ebin"

# The name of the Erlang node, this must be unique on your host.

# Set the hostname to the fully qualified domain name of your host, or leave it as localhost.
# HOSTNAME=`hostname`

# The command used to restart zotonic when crashed, only used after a " start"

## The port and IP address zotonic will bind to (defaults to all ip addresses and port 8000)
export ZOTONIC_IP=any
export ZOTONIC_PORT=8000

# The filename where zotonic writes its unix process Id to, for monitoring applications.

pushd $ZOTONIC >/dev/null

function start() {
    echo  "Starting zotonic $SNAME"
    make -C $ZOTONIC >/dev/null
    $ERL -pa $PA -name $SNAME@$HOSTNAME -boot start_sasl -heart -detached -s zotonic

function stop() {
    echo "Stopping zotonic $SNAME"
    $ERL -noshell -pa $PA -sname ${SNAME}_stop -s zotonic stop $SNAME@$HOSTNAME

function update() {
    echo "Updating zotonic $SNAME"
    $ERL -noshell -pa $PA -sname ${SNAME}_stop -s zotonic update $SNAME@$HOSTNAME

case $1 in

    $ERL +P 10000000 +K true -pa $PA -name $SNAME@$HOSTNAME -boot start_sasl -s zotonic

    $ERL -sname zotonic_shell -remsh $SNAME@$HOSTNAME

    echo "Restarting zotonic"

    echo "Usage: $0 {debug|start|stop|restart|update}"
    exit 1

popd > /dev/null
exit 0

Table Of Contents

Previous topic

Useful environment variables

Next topic

The Zotonic shell