3

我在 heroku 上使用 Channels 2 创建了一个 django 应用程序,但它在以 503 错误代码开始时崩溃。

2020-04-07T10:05:35.226253+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=www.mysite.com request_id=317bfbe6-9055-4957-9fbb-8190616c3964 fwd="" dyno= connect= service= status=503 bytes= protocol=https

档案:

release: python manage.py migrate
web : daphne myproject.asgi:application --port $PORT --bind 0.0.0.0 -v2 
worker: python manage.py runworker channels -v2

设置.py

ASGI_APPLICATION = 'myproject.routing.application'
# Channels
    CHANNEL_LAYERS = {
    "default": {
         'BACKEND': 'channels_redis.core.RedisChannelLayer',
        "CONFIG": {
            "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
        },

    },
}

asgi.py

import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
application = get_default_application()
4

2 回答 2

1

你的 Procfile 应该有这个:

release: python3 manage.py makemigrations && python3 manage.py migrate
web: daphne domecode.asgi:application --port $PORT --bind 0.0.0.0 -v2
worker: python3 manage.py runworker channel_layer -v2

channel_layer而不是channels. 为什么?好吧,再看看你的设置,你已经在那里声明了 CHANNEL_LAYER,你在 Docker 上的 Redis 实例上本地运行。但是,在部署时,您无法在 Docker 上运行它(我的意思是从技术上讲,您可以在 Digital Ocean 或 AWS 上使用 Docker Swarms,我不确定它如何在 Heroku 上运行),因此您需要将其更改为channel_layer.

于 2020-09-08T20:40:11.023 回答
0

您是否在 heroku 中创建了流程 Web 的实例?您可以在命令行中执行此操作:heroku ps:scale worker=1

给 Procfile 中的工人作为:

worker: python manage.py runworker channels --settings=<project-name>.settings -v2
于 2020-06-08T14:57:10.903 回答