3

我正在使用 Django 开发一个应用程序,我最初使用 WSGI 环境将它部署在 Google Cloud Platform 上,现在我已经在应用程序中添加并使用了通道,因此我必须从 WSGI 转移到 ASGI,但是我在部署时遇到错误当我使用 ASGI 环境时到谷歌云平台

我得到了错误: respiter = self.wsgi(environ, resp.start_response) TypeError: __call__() 需要 2 个位置参数,但给出了 3 个

当我想使用 ASGI environmnet 时,我注释了 WSGI 文件的所有内容,这是我的相关代码:

ASGI 文件:

import os
import django
from channels.routing import get_default_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Frames.settings')
django.setup()
application = get_default_application()

WSGI 文件(我已评论):

"""
WSGI config for Frames project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/


import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Frames.settings')

application = get_wsgi_application()"""

主.py

from Frames.asgi import application
app = application

Settings.py(主要更改,我已经从 settings.py 中删除了所有与 WSGI 相关的内容)


ASGI_APPLICATION = "Frames.routing.application"

CHANNEL_LAYERS={
    "default":{
      "BACKEND": "channels_redis.core.RedisChannelLayer",
      "CONFIG": {
                "hosts": [("localhost", 6379)],
            },
    },
}

如何运行 ASGI 环境?如果我在显示我的代码时遗漏了一些东西,我也可以证明,我不知道问题是什么,我部署 ASGI 应用程序的方式是否正确?

4

1 回答 1

1

App Engine Standard 目前不支持 ASGI。

要使用 ASGI,您应该使用 App Engine Flexible,您可以在其中进一步调整环境。

然后,您可能会发现 GAE flex 文档中有关使用 WebSockets 创建持久连接的指南很有用。

于 2020-01-08T09:09:30.750 回答