Django-Celery-Redisのherokuへのデプロイメモ。
Heroku: Up and Running: Effortless Application Deployment and Scaling
- 作者: Neil Middleton,Richard Schneeman
- 出版社/メーカー: O'Reilly Media
- 発売日: 2013/11/24
- メディア: ペーパーバック
- クリック: 2回
- この商品を含むブログを見る
コメント
Django+Celeryで非同期処理ができるようになり、最終関門は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で動くか動作確認
(どこでもOK)$redis-server #redis起動は同じく必要 (仮想環境)$heroku local
ここまではローカルのsettings.pyで動かしました。これでデプロイ下準備は完了。
手順3 heroku-redisアドオンを追加
$heroku addons:create heroku-redis:hobby-dev
手順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
これは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']
引用元
↓こう変える
#↓ここから追記↓ 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 $heroku ps:scale worker=1 #↑workerプロセスを起動するためにこれがいる!
手順8 logをとってうまく行ってるかチェック
$heroku logs -t
参考資料
"Connecting in Django"の箇所 devcenter.heroku.com
自分の完成形とちょっと違うけど、参考になりました github.com