In short:
If you are using mod_wsgi, which we recommend, you will need to give it a WSGI file. Here is a sample WSGI file that correctly sets up your sys.path to use all of the correct components:
import os
import sys
# redirect sys.stdout to sys.stderr for bad libraries like geopy that uses
# print statements for optional import exceptions.
sys.stdout = sys.stderr
from os.path import abspath, dirname, join
from site import addsitedir
path = addsitedir(abspath(join(dirname(__file__), "pinax", "libs", "external_libs")), set())
if path:
sys.path = list(path) + sys.path
sys.path.insert(0, abspath(join(dirname(__file__), "pinax", "apps", "external_apps")))
sys.path.insert(0, abspath(join(dirname(__file__), "pinax", "apps", "local_apps")))
sys.path.insert(0, abspath(join(dirname(__file__), "pinax", "apps", "core_apps")))
sys.path.insert(0, abspath(join(dirname(__file__), "pinax", "projects")))
from django.core.handlers.wsgi import WSGIHandler
os.environ["DJANGO_SETTINGS_MODULE"] = "complete_project.settings"
application = WSGIHandler()
If mod_python is your flavor we have provided the correct hooks for you to use Pinax. Here is a sample Apache config that you can use:
<Location "/"> SetHandler python-program PythonHandler complete_project.deploy.modpython SetEnv DJANGO_SETTINGS_MODULE complete_project.settings PythonDebug On PythonPath "['/path/to/pinax/projects'] + sys.path" </Location>
Note
It is important to note that you should pay careful attension to the value of PythonHandler above. It is not using django.core.handlers.modpython. It is using a mod_python handler located in your project’s deploy/ directory. The reason why we have our own mod_python handler is because we need to setup the Pinax environment otherwise you will see failing imports.
Both mail messages and (some) notifications are queued for asynchronous delivery. To actually deliver them you need to run
./manage.py send_mail
and
./manage.py emit_notices
on a frequent, regular basis.
Because failed mail will be deferred, you need an additional, less frequency run of
./manage.py retry_deferred
We recommend setting up cron jobs similar to the following:
* * * * * (cd /path/to/pinax; /usr/local/bin/python2.5 manage.py send_mail >> /path/to/pinax/cron_mail.log 2>&1) * * * * * (cd /path/to/pinax ; /usr/local/bin/python2.5 manage.py emit_notices >> /path/to/pinax/emit_notices.log 2>&1) 0,20,40 * * * * (cd /path/to/pinax; /usr/local/bin/python2.5 manage.py retry_deferred >> /path/to/pinax/cron_mail_deferred.log 2>&1)
This runs send_mail and emit_notices every minute and retry_deferred every 20 minutes.