当前位置: 首页 > 知识库问答 >
问题:

Web套接字无法在Heroku上的Django应用程序中工作

楚嘉胜
2023-03-14

我正在尝试在heroku上运行我的第一个django应用程序,我设法成功部署了该应用程序,除了Web套接字之外,一切都正常。在本地,我在内存通道中使用,一切都正常。我在内存通道和redis中尝试了heroku,但都不起作用。我尝试了许多不同的配置,但我无法找出任何有效的解决方案。Heroku日志也没有给我任何可能出错的线索...

我在浏览器中得到的错误:

join_game.js:222 WebSocket connection to 'wss://battleships-war.herokuapp.com/game/20' failed: Error during WebSocket handshake: Unexpected response code: 404

Javascript 客户端代码:

[我尝试了ws和wss前缀,都崩溃了]

var ws = new WebSocket((window.location.protocol == 'http') ? 'ws://' : 'wss://' +  window.location.host + '/game/' + gameId);

settings.py中的redis配置

 CHANNEL_LAYERS = {
     "default": {
         "BACKEND": "asgi_redis.RedisChannelLayer",
         "CONFIG": {
             "hosts": [('ec2-34-254-133-4.eu-west-1.compute.amazonaws.com', 26849)],
        },
         'ROUTING': 'battleships.routing.channel_routing',
    }, }

在本地工作的内存配置中可选:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'asgiref.inmemory.ChannelLayer',
        'ROUTING': 'battleships.routing.channel_routing',
    },
}

来自heroku的redis凭据:

  • 主持人:ec2-34-254-133-4.eu-west-1.compute.amazonaws。com
  • 用户
  • 端口26849
  • 密码
  • URI:redis://h:p69877187246d4f0b36a94488814ee0b372234a2e943a61df0cdc84e4f85f35f2@ec2-34-254-133-4.eu-west-1.compute.amazonaws.com电话:26849

Procfile:

web: gunicorn battleships.wsgi --preload

heroku日志:

2019-01-14t 21:06:52.847189 00:00 heroku[web . 1]:状态从up更改为Starting 2019-01-14t 21:07:00.911326 00:00 heroku[web . 1]:使用命令< code>gunicorn战舰. wsgi - preload启动进程2019-01-14t 21:07:04.629926 01 protocol = http 2019-01-14t 21:08:01.604730 00:00 heroku[路由器]:at = info method = GET path = "/game/22/dfgdfgdfgdf " host =战舰-war . heroku app . com request _ id = d4c 9 a 31 a-0dc 6-436 a-b35b-054 e 94770 a5e FWD = " 80 . 49 . 199 . 124 " dyno = web . 1 connect = 0

有人能帮我做这件事吗,或者建议一种不同的方法?

共有1个答案

程吕恭
2023-03-14

我不认为gunicorn支持asgi(我不确定)。但是,我做到了,而且成功了。请记住,我没有使用通道层:

asgi.py

import os
import django
from channels.routing import get_default_application

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

procfile

web: daphne project.asgi:application --port $PORT --bind 0.0.0.0
 类似资料:
  • 我正在尝试将我的JavaSpring Boot Web应用程序部署到Heroku。 要在本地启动它,我运行: 然后 因此,我为Heroku创建了Procfile: 我使用Heroku-Github集成,应用程序从Github部署到Heroku。所以我就把它推到那里。 但应用程序不会启动。 给我: 不显示目录。 我认为Heroku没有构建这个应用程序。但是我做错了什么?提前感谢您的建议!

  • 我正在用Django模板的两个勺子制作一个Django应用程序。得到这个Heroku错误,我的Postgres生产设置关闭了吗? > 操作错误/无法连接到服务器:连接被拒绝服务器是否运行在主机“localhost”(127.0.0.1)上并接受端口5432上的TCP/IP连接? 异常位置: 工头开工良好 procfile: local.py设置: DATABASES={'default':{'en

  • 我想将数据发送到一个WebService,但它没有返回一个有效的反馈,并且在字符串上显示错误。我正在使用KSOAP2。 null 对象已收集无法计算org.ksoap2.serialization.soapobject.ToString() 如果一切正常,它应该给我一个'OK',但是WebService返回一个XML(responseDump): <?XML Version=“1.0”encodi

  • 问题内容: 有什么方法可以配置多个工作进程和/或Web进程以在单个Heroku应用程序容器中运行?还是必须将其分解为多个Heroku应用程序? 例如: 问题答案: 所有进程必须具有唯一的名称。 此外,名称 和 无关紧要,没有特殊含义。 唯一带有重要名称的进程是该进程,如Heroku文档中所述: Web进程类型是特殊的,因为它是唯一将从Heroku路由器接收HTTP流量的进程类型。其他过程类型可以任

  • 问题内容: 我已经编写了一个基本的node.js应用程序,并且设法将其部署在Heroku上没有任何问题。我创建了 package.json 和 Procfile ,但是从日志中看到没有正在运行的进程,因此无法获得任何响应。可能是什么问题呢? PS: 我不想使用 Express 框架 我的代码: 我的package.json: 日志: 问题答案: 您已缩放heroku应用程序了吗? 这是必需的步骤。

  • 注意:这里有类似的问题,但没有一个解决方案对我有效。我花了几天的时间想把它弄好。 我已经将一个WAR文件部署到Tomcat,“Tomcat Web Application Manager”显示它已经启动。当我点击web应用程序“/forecaster”时,我得到一个404错误。web应用程序在从调试器(IntelliJ)运行时工作。WAR文件名为“forecaster.WAR”,我尝试过的路径是: