diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 9e99e4d4..977b3c18 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -48,6 +48,7 @@ Cullen Rhodes / @c-rhodes Burhan Khalid / @burhan Audrey Roy Greenfeld / @audreyr (and creator/maintainer of cookiecutter) * Burhan Khalid / @burhan +Jannis Gebauer / @got_nil * Possesses commit rights diff --git a/README.rst b/README.rst index fd6c3eb0..d74c9f59 100644 --- a/README.rst +++ b/README.rst @@ -27,6 +27,7 @@ Features * Basic e-mail configurations for send emails via Mailgun_ * Media storage using Amazon S3 * Serve static files from Amazon S3 or Whitenoise_ (optional) +* Pre configured Celery_ (optional) .. _Bootstrap: https://github.com/twbs/bootstrap .. _AngularJS: https://github.com/angular/angular.js @@ -37,6 +38,7 @@ Features .. _Procfile: https://devcenter.heroku.com/articles/procfile .. _Mailgun: https://mailgun.com/ .. _Whitenoise: https://whitenoise.readthedocs.org/ +.. _Celery: http://www.celeryproject.org/ Constraints diff --git a/cookiecutter.json b/cookiecutter.json index 25233dbb..b61ca307 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -10,5 +10,6 @@ "now": "2015/01/13", "year": "{{ cookiecutter.now[:4] }}", "use_whitenoise": "y", + "use_celery": "n", "windows": "n" } diff --git a/{{cookiecutter.repo_name}}/README.rst b/{{cookiecutter.repo_name}}/README.rst index 17dde268..dd1f24e2 100644 --- a/{{cookiecutter.repo_name}}/README.rst +++ b/{{cookiecutter.repo_name}}/README.rst @@ -90,14 +90,18 @@ For convenience, you can keep your normal user logged in on Chrome and your supe Live reloading and Sass CSS compilation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you'd like to take advantage of live reloading and Sass / Compass CSS compilation you can do so with the included Grunt task. +If you'd like to take advantage of live reloading and Sass / Compass CSS compilation you can do so with a little bit of prep work. Make sure that nodejs_ is installed. Then in the project root run:: - $ npm install grunt + $ npm install .. _nodejs: http://nodejs.org/download/ +If you don't already have it, install `compass` (doesn't hurt if you run this command twice):: + + gem install compass + Now you just need:: $ grunt serve @@ -108,6 +112,21 @@ To get live reloading to work you'll probably need to install an `appropriate br .. _appropriate browser extension: http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions- +{% if cookiecutter.use_celery == "y" %} +Celery +^^^^^^ +This app comes with Celery. + +To run a celery worker: + +.. code-block:: bash + + cd {{cookiecutter.repo_name}} + celery -A {{cookiecutter.repo_name}} worker -l info + +Please note: For Celerys import magic to work, it is important *where* the celery commands are run. If you are in the same folder with *manage.py*, you should be right. +{% endif %} + It's time to write the code!!! diff --git a/{{cookiecutter.repo_name}}/config/settings/common.py b/{{cookiecutter.repo_name}}/config/settings/common.py index 957d3110..22d3d084 100644 --- a/{{cookiecutter.repo_name}}/config/settings/common.py +++ b/{{cookiecutter.repo_name}}/config/settings/common.py @@ -255,5 +255,12 @@ LOGGING = { }, } } - +{% if cookiecutter.use_celery == "y" %} +########## CELERY +INSTALLED_APPS += ('{{cookiecutter.repo_name}}.taskapp.celery.CeleryConfig',) +# if you are not using the django database broker (e.g. rabbitmq, redis, memcached), you can remove the next line. +INSTALLED_APPS += ('kombu.transport.django',) +BROKER_URL = env("CELERY_BROKER_URL", default='django://') +########## END CELERY +{% endif %} # Your common stuff: Below this line define 3rd party library settings diff --git a/{{cookiecutter.repo_name}}/config/settings/local.py b/{{cookiecutter.repo_name}}/config/settings/local.py index 8126310b..2124fcc6 100644 --- a/{{cookiecutter.repo_name}}/config/settings/local.py +++ b/{{cookiecutter.repo_name}}/config/settings/local.py @@ -58,5 +58,10 @@ INSTALLED_APPS += ('django_extensions', ) # TESTING # ------------------------------------------------------------------------------ TEST_RUNNER = 'django.test.runner.DiscoverRunner' - +{% if cookiecutter.celery_support == "y" %} +########## CELERY +# In development, all tasks will be executed locally by blocking until the task returns +CELERY_ALWAYS_EAGER = True +########## END CELERY +{% endif %} # Your local stuff: Below this line define 3rd party library settings diff --git a/{{cookiecutter.repo_name}}/requirements/base.txt b/{{cookiecutter.repo_name}}/requirements/base.txt index 9a777995..7f3c73b1 100644 --- a/{{cookiecutter.repo_name}}/requirements/base.txt +++ b/{{cookiecutter.repo_name}}/requirements/base.txt @@ -1,5 +1,5 @@ # Bleeding edge Django -django==1.8.2 +django==1.8.3 # Configuration django-environ==0.3.0 @@ -38,4 +38,8 @@ pytz==2015.4 django-redis==4.2.0 redis>=2.10.0 +{% if cookiecutter.use_celery == "y" %} +celery==3.1.18 +{% endif %} + # Your custom requirements go here diff --git a/{{cookiecutter.repo_name}}/requirements/local.txt b/{{cookiecutter.repo_name}}/requirements/local.txt index 134ed33a..ea21f87a 100644 --- a/{{cookiecutter.repo_name}}/requirements/local.txt +++ b/{{cookiecutter.repo_name}}/requirements/local.txt @@ -7,3 +7,6 @@ Werkzeug==0.10.4 # django-debug-toolbar that works with Django 1.5+ django-debug-toolbar==1.3.2 + +# improved REPL +ipdb==0.8.1 diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/taskapp/__init__.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/taskapp/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/taskapp/celery.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/taskapp/celery.py new file mode 100644 index 00000000..33cda5c6 --- /dev/null +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/taskapp/celery.py @@ -0,0 +1,33 @@ +{% if cookiecutter.use_celery == "y" %} +from __future__ import absolute_import +import os +from celery import Celery +from django.apps import AppConfig +from django.conf import settings + +if not settings.configured: + # set the default Django settings module for the 'celery' program. + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local") + + +app = Celery('{{cookiecutter.repo_name}}') + + +class CeleryConfig(AppConfig): + name = '{{cookiecutter.repo_name}}.taskapp' + verbose_name = 'Celery Config' + + def ready(self): + # Using a string here means the worker will not have to + # pickle the object when using Windows. + app.config_from_object('django.conf:settings') + app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True) + + +@app.task(bind=True) +def debug_task(self): + print('Request: {0!r}'.format(self.request)) +{% else %} +# Use this as a starting point for your project with celery. +# If you are not using celery, you can remove this app +{% endif %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/base.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/base.html index a46ca11c..f4732389 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/base.html +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/base.html @@ -34,21 +34,36 @@
-