diff --git a/celeryworker.sh b/celeryworker.sh new file mode 100755 index 0000000..0b38976 --- /dev/null +++ b/celeryworker.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +. env/bin/activate + +python manage.py celery worker --loglevel=info diff --git a/issue/notifications.py b/issue/notifications.py index 5ff75b4..360b3fc 100644 --- a/issue/notifications.py +++ b/issue/notifications.py @@ -1,10 +1,14 @@ from __future__ import unicode_literals -from django.core.mail import send_mass_mail from django.template.loader import render_to_string from django.core.urlresolvers import reverse from django.conf import settings +if 'djcelery' in settings.INSTALLED_APPS: + from issue.tasks import send_mass_mail +else: + from django.core.mail import send_mass_mail + from issue.models import * @@ -41,7 +45,10 @@ def notify_new_issue(issue): data += [(subject, message, "%s <%s>" % (issue.author.username, from_addr), [dest_addr])] - send_mass_mail(tuple(data)) + if 'djcelery' in settings.INSTALLED_APPS: + send_mass_mail.delay(tuple(data)) + else: + send_mass_mail(tuple(data)) def notify_new_comment(event): @@ -94,4 +101,7 @@ def notify_event(event, template): data += [(subject, message, '%s <%s>' % (event.author.username, from_addr), [dest_addr])] - send_mass_mail(tuple(data)) + if 'djcelery' in settings.INSTALLED_APPS: + send_mass_mail.delay(tuple(data)) + else: + send_mass_mail(tuple(data)) diff --git a/issue/tasks.py b/issue/tasks.py new file mode 100644 index 0000000..4bbfe7d --- /dev/null +++ b/issue/tasks.py @@ -0,0 +1,8 @@ +from django.core.mail import send_mass_mail as django_send_mass_mail + +from celery import shared_task + + +@shared_task +def send_mass_mail(datatuple): + django_send_mass_mail(datatuple) diff --git a/ponytracker/__init__.py b/ponytracker/__init__.py index e69de29..674befe 100644 --- a/ponytracker/__init__.py +++ b/ponytracker/__init__.py @@ -0,0 +1,3 @@ +from django.conf import settings +if 'djcelery' in settings.INSTALLED_APPS: + from ponytracker.celery import app as celery_app diff --git a/ponytracker/celery.py b/ponytracker/celery.py new file mode 100644 index 0000000..1a92326 --- /dev/null +++ b/ponytracker/celery.py @@ -0,0 +1,18 @@ +import os + +from celery import Celery + +from django.conf import settings + + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ponytracker.settings') + +app = Celery('ponytracker') + +app.config_from_object('django.conf:settings') +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) + + +@app.task(bind=True) +def debug_task(self): + print('Request: {0!r}'.format(self.request)) diff --git a/ponytracker/local_settings.py.example b/ponytracker/local_settings.py.example index bfb2a90..3a2d51f 100644 --- a/ponytracker/local_settings.py.example +++ b/ponytracker/local_settings.py.example @@ -1,6 +1,13 @@ from ponytracker.settings import * +### Uncomment to use celery worker +### Don't forget to install a broker: +### # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html#broker-overview +#INSTALLED_APPS += ('djcelery',) +#from djcelery import celery +#celery.setup_loader() + SECRET_KEY='CHANGE ME' DEBUG = False diff --git a/ponytracker/settings.py b/ponytracker/settings.py index 782cee6..81b0e5e 100644 --- a/ponytracker/settings.py +++ b/ponytracker/settings.py @@ -142,3 +142,10 @@ BOOTSTRAP3 = { # The complete URL to the Bootstrap JavaScript file (None means derive it from base_url) 'javascript_url': None, } + +# Celery configuration +BROKER_URL = 'redis://localhost:6379/0' +CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' diff --git a/requirements.worker.txt b/requirements.worker.txt new file mode 100644 index 0000000..de492ff --- /dev/null +++ b/requirements.worker.txt @@ -0,0 +1,2 @@ +celery +django-celery