如何在 Heroku 上使用 Channels 和 Celery 部署 Django?

Posted

技术标签:

【中文标题】如何在 Heroku 上使用 Channels 和 Celery 部署 Django?【英文标题】:How to deploy Django with Channels and Celery on Heroku? 【发布时间】:2018-07-15 13:21:03 【问题描述】:

如何在 Heroku 平台上部署以下堆栈?

姜戈 Django 频道 芹菜

限制肯定在Procfile

用 Celery 部署 Django 应该是这样的:

web: gunicorn project.wsgi:application
worker: celery worker --app=project.taskapp --loglevel=info

在使用 Channels 部署 Django 时:

web: daphne project.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker -v2

web 进程可以使用 ASGI,但 worker 进程将被 Channels 使用,我不知道 Celery 可以如何与它一起启动。

【问题讨论】:

【参考方案1】:

您可以在 Procfile 中拥有任意数量的条目。唯一特别的是“web”,因为这是 Heroku 期望接收 Web 请求的那个,也是唯一一个它会自动为您启动的。您可以使用自己的名字来命名:

web: gunicorn project.wsgi:application
celeryworker: celery worker --app=project.taskapp --loglevel=info
channelsworker: python manage.py runworker -v2

现在您可以使用heroku ps:scale celeryworker=1heroku ps:scale channelsworker=1 来启动其他两个进程。

请参阅Heroku Procfile docs 了解更多信息。

【讨论】:

你是我的英雄。非常感谢先生。

以上是关于如何在 Heroku 上使用 Channels 和 Celery 部署 Django?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Django channels_redis 与 Heroku Redis 建立连接

Django Channels Websockets 立即连接和断开连接

Django频道使用redis设置在heroku泄漏内存

Django 现在在 Heroku 中使用 ASGI + WSGI 的频道

如何在 Heroku 上使用带有 Axios 和 Vue 的 Postgres 数据库?

如何在部署在 heroku 上的解析服务器上使用云代码?