I began using celery 3.1.9 today with Django. This newer version has a tighter integration with django that removes the need to using django-celery.
I use multiple settings files and I was wondering if there was an easy way to specify which settings file to use when initializing the celery worker
?
With djcelery it is quite simply since it uses the manage.py commands.
I naively tried to check if
settings.DEBUG
was true in the celery.py file, but of course that failed because the settings were not loaded yet!
THe next step is to dive into the django-celery source and emulate what they are doing, but before that, I was hoping someone had found an easy way of achieving this?
Thank you
A solution is to use environment variables.
In celery.py
Instead of
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
use
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{0}'.format(get_env_setting('DJANGO_SETTINGS_MODULE')))
With get_env_setting
defined as:
from os import environ
from django.core.exceptions import ImproperlyConfigured
# https://github.com/twoscoops/django-twoscoops-project/blob/develop/project_name/project_name/settings/production.py#L14-L21
def get_env_setting(setting):
""" Get the environment setting or return exception """
try:
return environ[setting]
except KeyError:
error_msg = "Set the %s env variable" % setting
raise ImproperlyConfigured(error_msg)
You could put that in your settings.base.py
e.g. .
Then set the DJANGO_SETTINGS_MODULE
environment variable for each environment. E.g. set it to my_project.settings.production
in the production environment. This variable can by permanently set by adding the following line to ~/.bashrc:
export DJANGO_SETTINGS_MODULE=my_project.settings.production
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With