在 Heroku 上部署 asgi 和 wsgi

use*_*400 6 python django wsgi heroku channels

我正在尝试使用 asgi 和我现有的 wsgi 实现在 Heroku 上部署 Django 频道。我可以使用以下设置将 asgi 和 wsgi 部署到 heroku 吗?

我的档案:

web: gunicorn chatbot.wsgi --preload --log-file -
daphne: daphne chat.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
chatworker: python manage.py runworker --settings=chat.settings -v2
Run Code Online (Sandbox Code Playgroud)

我的 asgi.py 文件:

import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chat.settings")

channel_layer = get_channel_layer()
Run Code Online (Sandbox Code Playgroud)

我的 wsgi.py 文件:

import os

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chat.settings")

application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Run Code Online (Sandbox Code Playgroud)

我在 settings.py 中的通道层:

CHANNEL_LAYERS = {
    'default': {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')]
        },
        'ROUTING': 'chat.routing.channel_routing',
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*400 11

弄清楚这一点,以防这可能与其他任何人有关。仅使用 asgi 是最好的解决方案。我的 procfile 结束是:

web: daphne chat.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
chatworker: python manage.py runworker --settings=chat.settings -v2
Run Code Online (Sandbox Code Playgroud)

作为提供静态文件的解决方案,我更新了routing.py 文件以包含一个StaticFileConsumer。

  • @Anatol,它可能已经很旧了,但这里是为那些不知道答案的人准备的`python manage.py runworkerchannels --settings=chat.settings -v2` (3认同)