0
我一直在使用我的.env文件裏的settings.py文件中的配置變量來存放我的celery.py。芹菜.env變量在settings.py中沒有使用
當我硬編碼CELERY_BROKER_URL = 'redis://localhost'
,一切正常,但是,當我使用CELERY_BROKER_URL= os.environ.get('REDIS_URL')
,REDIS_URL沒有被接管,我得到一個錯誤。
celery.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ['DJANGO_SETTINGS_MODULE'] = 'xlink.settings'
app = Celery('xlink')
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
.ENV:
REDIS_URL = 'redis://localhost'
REDIS_PASSWORD = 'yow'
REDIS_HOST = 'localhost'
不工作settings.py版本1:
CELERY_BROKER_URL= os.environ.get('REDIS_URL')
CELERY_RESULT_BACKEND= os.environ.get('REDIS_URL')
錯誤的版本1(試圖接管默認redis設置爲註釋):
[2017-08-26 10:57:09,253: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 61] Connection refused.
Trying again in 2.00 seconds...
不工作settings.py版本2:
CELERY_BROKER_URL = 'redis://:{}@{}:6379/0'.format(
os.environ.get('REDIS_PASSWORD'),
os.environ.get('REDIS_HOST'))
錯誤版本2(顯然不是接管.ENV變量):
[2017-08-26 11:11:03,419: ERROR/MainProcess] consumer: Cannot connect to redis://:**@none:6379/0: Error 8 connecting to none:6379. nodename nor servname provided, or not known..
Trying again in 2.00 seconds...
WORKING settings.py:
CELERY_BROKER_URL= 'redis://localhost'
CELERY_RESULT_BACKEND= 'redis://localhost'
tasks.py:
import celery
from celery import shared_task
@shared_task
def add(x, y):
return x + y
那麼你是如何開始的芹菜?你在做什麼來告訴它拿起env設置? –
我在heroku或本地運行它。 Heroku從procfile'worker:celery worker --app = tasks.app'開始。在本地,我使用以下命令啓動它:'celery -A xlink worker -l info' – radzia2
btw,我也在celery.py中嘗試了這個:'os.environ.setdefault('DJANGO_SETTINGS_MODULE',xlink.settings')',並以某種方式試圖把這個添加到strat-up命令中,但沒有成功 – radzia2