2017-08-04 95 views
0

我有一个Django应用程序,并且需要添加一个Celery异步任务。我想从dev.py中调用一个设置变量,例如MY_VARIABLE ='test'。为了简化的例子,假设有我的任务:在运行Celery任务时调用settings.py变量

from django.conf import settings 

@shared_task 
def test_task(): 
    return settings.MY_VARIABLE 

我celery.py看起来像

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings.dev') 

app = Celery('proj') 

app.config_from_object('django.conf:settings', namespace='CELERY') 

app.autodiscover_tasks() 

的dev.py看起来像

CELERY_BROKER_URL = 'amqp://guest:[email protected]:5672//' 
CELERY_RESULT_BACKEND = 'django-db' 
# CELERY_RESULT_BACKEND = 'db+postgresql+psycopg2://postgres:[email protected]/postgres' 

CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
MY_VARIABLE='test' 

虽然通过乳宁芹菜工人

export DJANGO_SETTINGS_MODULE=proj.settings.dev 
celery -A proj worker -l info 

in the来电我跑

res = test_task.delay(*args) 

在芹菜终端响应我收到AttributeError。

'Settings' object has no attribute 'MY_VARIABLE' 

我在做什么错了?以及我可以如何正确调用异步任务的设置变量?

在此先感谢!

+0

你的celery.py看起来像什么 – iklinac

+0

@iklinac我将celery.py添加到问题 – sorryMike

回答

0

看起来您并未从Django设置中加载您的dev.py文件。你的芹菜应用程序和任务代码看起来确实是正确的如果您在加载dev.py时可以将该位粘贴到设置中,这对帮助您非常有帮助。

+0

我在问题中添加了dev.py内容。 – sorryMike

+0

是的,但** MY_VARIABLE **不在您的dev.py示例中,另外,您的manage.py将dev.py作为Django设置加载? – codeadict

+0

我修改我的dev.py并启动我的manage.py与DAJNGO_SETTINGS_MODULE = proj.settings.dev。问题仍然存在。我的Django版本是1.11和芹菜是4.0.2 – sorryMike

相关问题