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