This only happens when DEBUG=False in the settings.py.
It's possible to set a handle that change this behavior with a handler500 variable in the root urls.py.
So, we can easily write a simple view that sends an error notification to our jabber account.
First of all, you need to install xmpppy and dnspython:
$ easy_install xmpppy $ easy_install dnspython
Add to settings.py the jabber parameters such as the jabber id, password, recipient, etc.:
JABBER_ERROR_NOTIFICATION = True JABBER_ID = 'your_jabberid@jabberdomain.com' JABBER_PASSWORD = 'your_jabber_password' JABBER_RECIPIENT = 'recipient@jabberdomain.com' JABBER_ERROR_TEXT = 'An error occurred in "Project Name", please check your email.'
Start a new app named errors or something else and add it to the INSTALLED_APPS tuple in the settings.py:
python manage.py startapp errors
Add a handler500 variable with the view in the root urls.py:
handler500 = 'errors.views.server_error_jabber'
Finally add the view in errors.views that sends a jabber notification and returns a 500 error page:
from django.views.defaults import server_error from django.conf import settings import xmpp, time def server_error_jabber(request, template_name='500.html'): if settings.JABBER_ERROR_NOTIFICATION: jid = xmpp.protocol.JID(settings.JABBER_ID) cl = xmpp.Client(jid.getDomain(), debug=[]) conn = cl.connect() if conn: auth = cl.auth(jid.getNode(), settings.JABBER_PASSWORD, resource=jid.getResource()) if auth: id = cl.send(xmpp.protocol.Message(settings.JABBER_RECIPIENT, settings.JABBER_ERROR_TEXT)) # Some older servers will not send the message if you disconnect immediately after sending time.sleep(1) return server_error(request, template_name)NOTE: Don't forget to set DEBUG=False in the settings.py.