Django-Celery-Redisのherokuへのデプロイがうまくできたときのメモ
転載元ブログ情報
自分のブログからの転載です
http://k-mawa.hateblo.jp/entry/2018/06/18/235203
コメント
Django+Celeryで非同期処理ができるようにしたDjangoプロジェクトのherokuデプロイです。公式ドキュメントだけだと(たぶん)エラーになり・・・試行錯誤の末についにできたので、その時のメモがもしかしたら他の人の役に立つかもしれないと思い投稿します。
手順1 Procfileに追加→Redis動かすワーカー起動を指示
↓Procfile↓
web: gunicorn [プロジェクト名].wsgi:application -b 0.0.0.0:$PORT
worker: celery worker -A [プロジェクト名].celery -l INFO
#↑この行が追加された
#ローカルで必要だった、
#$celery -A [プロジェクト名] worker -l infoをherokuが勝手にやってくれるイメージです
手順2 heroku localで動くか動作確認
$redis-server
#コマンドうつ場所はどこでもOK。heroku localでredis起動は同じく必要
(仮想環境,herokuのgitコマンドを打つ場所にて僕はやってます)$heroku local
$redis-server
#コマンドうつ場所はどこでもOK。heroku localでredis起動は同じく必要
(仮想環境,herokuのgitコマンドを打つ場所にて僕はやってます)$heroku local
ここまではローカル対応のsettings.pyで動かしました。これでデプロイ下準備は完了。
ローカルで動かない時用にチェックポイントを自分なりにまとめました。もうちょっとローカル開発部分を詳しく書いています。
http://k-mawa.hateblo.jp/entry/2018/06/18/211445
手順3 heroku-redisアドオンを追加
$heroku addons:create heroku-redis:hobby-dev
$heroku addons:create heroku-redis:hobby-dev
公式ドキュメントより。なおhobby-devは無料
https://elements.heroku.com/addons/heroku-redis
手順4 アドオンが追加されたか確認
$ 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 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
これはwebのherokuコンソールでも確認可能です。
手順5 Django用のheroku-redis接続パッケージをインストール
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']
#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
↓こう変える
#↓ここから追記↓
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']
REDIS_URLという環境変数はheroku:redisを導入しときに勝手に設定されるようだ。
手順7 いつものようにherokuにデプロイ
$git add.
$git commit -m "celery"
$git push heroku master
手順8 logをとってうまく行ってるかチェック
$heroku logs -t
参考資料
$git add.
$git commit -m "celery"
$git push heroku master
$heroku logs -t
参考資料
公式ドキュメント"Connecting in Django"の箇所
[https://devcenter.heroku.com/articles/heroku-redis#connecting-in-python:embed:cite]
自分の完成形とちょっと違うけど、参考になりました
[https://github.com/celery/django-celery/issues/455:embed:cite]
Author And Source
この問題について(Django-Celery-Redisのherokuへのデプロイがうまくできたときのメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/k_mawa82/items/67e052531d05a39470e8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .