2017-08-26 74 views
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 
+0

那麼你是如何開始的芹菜?你在做什麼來告訴它拿起env設置? –

+0

我在heroku或本地運行它。 Heroku從procfile'worker:celery worker --app = tasks.app'開始。在本地,我使用以下命令啓動它:'celery -A xlink worker -l info' – radzia2

+0

btw,我也在celery.py中嘗試了這個:'os.environ.setdefault('DJANGO_SETTINGS_MODULE',xlink.settings')',並以某種方式試圖把這個添加到strat-up命令中,但沒有成功 – radzia2

回答

1

的大錯我做了關於運行芹菜工人從這段代碼的命令行分開:

celery -A xlink worker -l info 

加入這行代碼到procfile與Heroku的命令運行的解決了這個問題。

簡介:

web: gunicorn xlink.wsgi --threads 4 --log-level debug 
worker: celery -A xlink worker -l info 

命令來讓它運行:

heroku local worker 

如果你想同時運行的工作者,在一個終端窗口中的Web應用程序,只是做heroku local兩者同時啓動在一個終端窗口中。

感謝提示@Daniel羅斯曼