繁体   English   中英

在settings.py中未使用的celery .env变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM