在 Heroku 上部署 asgi 和 wsgi

Posted

技术标签:

【中文标题】在 Heroku 上部署 asgi 和 wsgi【英文标题】:Deploying asgi and wsgi on Heroku 【发布时间】:2017-09-30 04:50:57 【问题描述】:

我正在尝试使用 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

我的 asgi.py 文件:

import os
from channels.asgi import get_channel_layer

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

channel_layer = get_channel_layer()

我的 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)

还有我在 settings.py 中的通道层:

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

【问题讨论】:

【参考方案1】:

想通了,以防这可能与其他任何人有关。只使用 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

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

【讨论】:

知道-v2 完成了什么吗? @MichaelHays -v2 用于冗长。运行python manage.py runserver --help了解更多信息 当我使用您的 Procfile 部署我的应用程序时,我收到此错误 manage.py runworker: error: the following arguments are required: channels。你知道我需要做什么吗? @Anatol 它可能已经很老了,但这里是为那些不知道答案的人准备的python manage.py runworker channels --settings=chat.settings -v2 @Roel 当我将我的 Procfile 工作人员更新为您建议的内容时出现此错误:ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'chat.routing'。我的聊天项目中有一个带有应用程序的 routing.py 文件。你知道我为什么会收到这个错误吗?

以上是关于在 Heroku 上部署 asgi 和 wsgi的主要内容,如果未能解决你的问题,请参考以下文章

WSGI&ASGI

WSGI&ASGI

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

Django & Heroku - ImportError: No module named gettingstarted.wsgi

Heroku - 没有名为 wsgi 的模块

在heroku上找不到gunicorn