我今天开始使用芹菜3.1.9和Django。这个更新的版本与django更紧密地集成,无需使用django-celery。
我使用了多个设置文件,我想知道在初始化celery worker
时是否有一种简单的方法来指定要使用的设置文件?
使用djcelery非常简单,因为它使用manage.py命令。
我天真地试图检查是否
settings.DEBUG
在celery.py文件中是正确的,但当然失败了,因为尚未加载设置!
下一步是潜入django-celery来源并模仿他们正在做的事情,但在此之前,我希望有人找到了一种简单的方法来实现这一目标?
谢谢
答案 0 :(得分:5)
解决方案是使用环境变量。
而不是
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
使用
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{0}'.format(get_env_setting('DJANGO_SETTINGS_MODULE')))
将get_env_setting
定义为:
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)
您可以将其放在settings.base.py
中,例如
然后为每个环境设置DJANGO_SETTINGS_MODULE
环境变量。例如。在生产环境中将其设置为my_project.settings.production
。可以通过将以下行添加到〜/ .bashrc:
export DJANGO_SETTINGS_MODULE=my_project.settings.production
答案 1 :(得分:1)
在命令行初始化芹菜工作者时,只需在celery命令之前设置环境变量。
DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info