当成功将Django-Celery-Redis部署到Heroku时的备忘录

转载来源博客信息

这是从我的博客转载的。

评论

这是一个使用Django+Celery实现异步处理的Django项目在Heroku上的部署。出于(大概)公式文档不足,我们经过多次尝试才最终成功,所以我想分享这些笔记,也许对其他人有帮助。

在Procfile中添加步骤1→指示启动Redis工作进程。

↓进程文件↓

web: gunicorn [プロジェクト名].wsgi:application -b 0.0.0.0:$PORT
worker: celery worker -A [プロジェクト名].celery -l INFO
#↑この行が追加された
#ローカルで必要だった、
#$celery -A [プロジェクト名] worker -l infoをherokuが勝手にやってくれるイメージです

在Heroku的本地环境中进行测试和确认能否工作。

$redis-server 
#コマンドうつ場所はどこでもOK。heroku localでredis起動は同じく必要
(仮想環境,herokuのgitコマンドを打つ場所にて僕はやってます)$heroku local

我已在本地進行了settings.py的調整,迄今為止這部分運作正常。這樣就完成了部署準備。

为了解决在本地无法运行时的问题,我整理了一份自己的检查点。我在其中更加详细地描述了本地开发部分。

在中国的本土语言中,只需要一个选项,以下是对该句的翻译:
添加Heroku Redis附加组件的步骤3。

$heroku addons:create heroku-redis:hobby-dev

来自官方文件。同时hobby-dev是免费的。访问https://elements.heroku.com/addons/heroku-redis。

请确认是否已添加了插件。

$ heroku redis:info
=== redis-xxxx-123456 (REDIS_URL) #仮の名前に変更してます
Plan:               Hobby Dev
Status:             available
Created:            2018-06-15 13:19 UTC
Version:            3.2.11
Timeout:            300
Maxmemory:          noeviction
Maintenance:        not required
Maintenance window: Thursdays 17:30 to 21:30 UTC
Persistence:        None
HA Status:          Unavailable

这也可以在Heroku控制台的Web界面上确认。

安装适用于Django的heroku-redis连接软件包的步骤5。

需要使用一个名为django-redis-cache的模块。它在官方网页上有提到。

pip install django-redis-cache

pip freeze > requirements.txt

将步骤6中的settings.py的Celery配置连接到部署到的heroku-redis。

#settings.pyローカルで動いた参考例(引用です)

BROKER_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = 'redis'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']

参考元:https://qiita.com/seizans/items/a40952248ef2004f1d62

请为以下内容提供一种中文本地化的表达方式:

Unfortunately, I am unable to view the referenced webpage as it requires a login. Could you please provide the specific content or context that you would like me to paraphrase?

改成以下的中文口语表达:
↓这样变成

#↓ここから追記↓

import os

CACHES = {
    "default": {
         "BACKEND": "redis_cache.RedisCache",
         "LOCATION": os.environ.get('REDIS_URL'),
    }
}

BROKER_URL = os.environ.get("REDIS_URL")
CELERY_RESULT_BACKEND = os.environ.get("REDIS_URL")

#↑ここまでが変更点↑

#BROKER_URL = 'redis://localhost' #localのときだけ
#CELERY_RESULT_BACKEND = 'redis' #localのときだけ
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']

在添加heroku:redis时,REDIS_URL环境变量似乎会自动设置。

第七步:像往常一样将应用部署到Heroku上。

$git add.
$git commit -m "celery"
$git push heroku master

请按照第八步骤进行记录,以确认进展顺利。

$heroku logs -t

请参考以下资料

以下是公式文档《Django连接》中的内容:
[https://devcenter.heroku.com/articles/heroku-redis#connecting-in-python:embed:cite]

自己的最终形态与稍有不同,但是这对我很有参考价值。

bannerAds