如何在heroku服务器中配置django-celery

时间:2016-08-02 05:24:25

标签: django heroku redis celery django-celery

在我的本地环境中,我使用celery进行计划任务,它在本地系统中工作,我使用redis作为工作人员 现在我想在heroku服务器中配置django芹菜 我试图在heroku应用程序中使用heroku-redis附加组件

在我的settings.py中添加了这些东西 CELERY STUFF

#BROKER_URL = 'redis://localhost:6379'
#BROKER_URL = 'os.environ['REDIS_URL']'
#BROKER_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379')
r = redis.from_url(os.environ.get("REDIS_URL"))
BROKER_URL = redis.from_url(os.environ.get("REDIS_URL"))
#CELERY_RESULT_BACKEND = 'redis://localhost:6379'
#CELERY_RESULT_BACKEND = 'os.environ['REDIS_URL']'
CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL')
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Canada/Eastern'

redis_url = urlparse.urlparse(os.environ.get('REDIS_URL'))
CACHES = {
"default": {
"BACKEND": "redis_cache.RedisCache",
"LOCATION": "{0}:{1}".format(redis_url.hostname, redis_url.port),
"OPTIONS": {
"PASSWORD": redis_url.password,
"DB": 0,
}
}
}

在我的proc文件中添加了

web: gunicorn bizbii.wsgi --log-file -
worker : celery workder -A tasks.app -l INFO
python manage.py celeryd -v 2 -B -s celery -E -l INFO

但仍然没有任务运行 之后我运行日志命令,然后返回

2016-07-30T08:53:19+00:00 app[heroku-redis]: source=REDIS sample#active-connections=1 sample#load-avg-1m=0.07 sample#load-avg-5m=0.075 sample#load-avg-15m=0.07 sample#read-iops=0 sample#write-iops=0 sample#memory-total=15664876.0kB sample#memory-free=13426732.0kB sample#memory-cached=460140kB sample#memory-redis=299616bytes sample#hit-rate=1 sample#evicted-keys=0

之后用这个命令创建dyno heroku运行bash -a bizbii2

并运行以下命令 python manage.py celeryd -v 2 -B -s celery -E -l INFO

所以它返回错误就像 [2016-08-03 08:23:26,506:ERROR / Beat] beat:连接错误:[Errno 111]连接被拒绝。在8.0秒内再试一次...... [2016-08-03 08:23:26,843:ERROR / MainProcess] consumer:无法连接到amqp:// guest:** @ 127.0.0.1:5672 //:[Errno 111]连接被拒绝。 在8.00秒内再次尝试......

请告诉我如何在heroku服务器上部署芹菜

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题。我使用以下行更新了我的procfile,错误消失了:

worker: celery -A TASKFILE worker -B --loglevel=info

将TASKFILE替换为例如:proj.celeryproj.tasks。这取决于您放置任务的位置。

相关问题