django-makefile icon indicating copy to clipboard operation
django-makefile copied to clipboard

Makefile templates to aid in development and deployment of Django sites

=============== django-makefile

Makefile templates to aid in development and deployment of Django sites

Why Make?

Because it's there.

Because calling commands from a file hosted with the rest of the source
greatly simplifies deployment scripts. The deployment script need know
of fewer paths.

Because

::

cd someproject-dir
make test

is easier to type than

::

django-admin.py test --settings=someproject.settings.test --pythonpath=/path/to/project/src

especially on the Monday the first working day after your vacation.

Because fabric gave me indigestion.

Deployment

Currently I use a shell script, something along the lines of::

#!/bin/bash

PROJECT_HOME="/path/to/project"
REMOTE="[email protected]"
REMOTE_HOME="/path/on/remote/machine"
REMOTE_VENV="/path/to/remote/virtualenv"
LOCAL_VENV="/path/to/local/virtualenv"
SECRET_KEY='production_secret_key_whatever_that_is'
REMOTE_PREFIX="export SECRET_KEY='${SECRET_KEY}' "
REMOTE_MAKE="${REMOTE_PREFIX} && make -C ${REMOTE_HOME} VIRTUAL_ENV=${REMOTE_VENV}"
LOCAL_MAKE="make -C ${PROJECT_HOME} VIRTUAL_ENV=${LOCAL_VENV} "

${LOCAL_MAKE} REMOTE_URI=${REMOTE}:${REMOTE_HOME} rsync

ssh ${REMOTE} "${REMOTE_MAKE} all"

This is not under version control since it needs to be updated per project, per client machine, and per remote machine.

Most Useful Targets

cmd: Runs any django command with production settings (in the CMD variable)

refresh: Touches the wsgi-file, thereby refreshing/reloading the site

showenv: Dumps some relevant environment variables

djangohelp: Runs django-admin.py help

test: Runs all tests

bootstrap: Sets up a virtualenv and runs pip, provided there's a requirements-file

all: Regenerates static files and reloads the site