[英]celery .env variables not used in settings.py
我一直在使用celery.py的settings.py中的.env文件中的config vars。
当我对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...
工作settings.py:
CELERY_BROKER_URL= 'redis://localhost'
CELERY_RESULT_BACKEND= 'redis://localhost'
task.py:
import celery
from celery import shared_task
@shared_task
def add(x, y):
return x + y
我犯的一个大错误是使用此代码将芹菜工人与命令行分开运行:
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
如果要在一个终端窗口中同时运行worker和Web应用程序,则只需执行heroku local
,即可在一个终端窗口中同时启动它们。
感谢您的提示@Daniel Roseman
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.