Python Django Errno 54'对等重置连接'

时间:2019-07-29 20:34:37

标签: python django sockets

在调试时遇到一些麻烦。我总是在第一次启动我的应用程序时收到此错误,然后在以后间歇性地启动。有人可以通过一些调试技术来帮助我吗?我尝试使用代理检查器-无济于事,我看不到任何有用的东西。我尝试了有关在Django设置中设置SITE_URL的建议。我尝试过在没有http://的情况下,在没有端口的情况下进行尝试...这是无用的错误:

Exception happened during processing of request from ('127.0.0.1', 57917)
Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 720, in __init__
    self.handle()
  File "/Users/ryan/.local/share/virtualenvs/portal-2PUjdB8V/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 171, in handle
    self.handle_one_request()
  File "/Users/ryan/.local/share/virtualenvs/portal-2PUjdB8V/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 179, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 589, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [Errno 54] Connection reset by peer

即使重新设置此连接,该应用程序似乎仍能正常运行,但它一直让我疯狂尝试调试。

6 个答案:

答案 0 :(得分:5)

如果收藏夹图标为.png而不是.ico,则会看到相同的行为。

此外,与其他网站上看到的建议相反,将Python降级到v3.6并不能解决问题。 screenshot of error w. png favicon

似乎是Django问题,在以后的Django版本中可能会永久修复。

https://bugs.python.org/issue27682#msg348302之后,我进行了如下所示的更改: code changes

然后我用ConnectionAbortedError替换了BrokenPipeError。这似乎可以处理异常。

答案 1 :(得分:4)

FFS ...太蠢了。我注意到,它在找不到图标后一直处于重置状态,因此我添加了一个图标。即使我从未明确加载图标,django似乎也尝试从项目的根目录加载默认图标。对于从事该项目的其他开发人员。奇怪的。 (出于完整性考虑)如果有人偶然发现此问题,我会使用favicon io来编写一个简单的文本。然后我像这样将其加载到我的html中:

{% load static %}
<!DOCTYPE html>
<html lang="en">

<head>
  <link rel="shortcut icon" href="{% static 'images/favicon.ico' %}" />
...

请务必在设置中正确设置静态路径。

答案 2 :(得分:1)

我遇到了同样的问题 ConnectionResetError: [Errno 54] Connection reset by peer

就我而言,问题是尝试通过带有 debug settings to False 的开发服务器提供静态文件,只有在设置文件中将 debug 设置为 True 时,开发服务器才能提供静态文件。< /p>

在我的设置文件中替换

DEBUG = False

DEBUG = True

在那之后,我重新启动了我的开发服务器,它对我有用!

答案 3 :(得分:0)

我从开发切换到生产时也遇到了这个问题。

在我执行 collectstatic 后它又正常工作了,我的猜测是它缺少用于生产的静态目录路径

在切换到生产环境之前执行此操作

<块引用>

python manage.py collectstatic

答案 4 :(得分:0)

我在我的项目中遇到了同样的问题。也许这篇文章可以帮助某人。 就我而言,问题是我用 onclick 从按钮调用函数,如下所示:

<a class="btn btn-warning"  onclick="submitData();">Caption</a>

我将其更改为更好的方式:

<button class="btn btn-warning" id="button-action">Caption</button>

然后处理点击:

document.getElementById('button-action').addEventListener('click', function(e){
    submitData()
})

答案 5 :(得分:0)

目前的答案都不适合我。这就是我在 MacOS 上为 Django 3 开发期间使错误消失的方法(在其他版本上未经测试)。

在您的项目应用之一中创建自定义 runserver 管理命令,该命令仅在 DEBUG==True 和您使用 Mac 时有所不同。特别注意Command.get_handler

#myapp/management/commands/runserver.py


import platform

import django.core.servers.basehttp
from django.conf import settings
from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand
from django.core.servers.basehttp import ServerHandler


def handle_one_request(self):
    """
    Exact copy of django.core.servers.WSGIRequestHandler.handle_one_request except it
    Completely ignores "ConnectionResetError: [Errno 54] Connection reset by peer"
    Which seems to be only noise on MacOS.
    """
    try:
        self.raw_requestline = self.rfile.readline(65537)
    except ConnectionResetError:
        return
    if len(self.raw_requestline) > 65536:
        self.requestline = ""
        self.request_version = ""
        self.command = ""
        self.send_error(414)
        return

    if not self.parse_request():  # An error code has been sent, just exit
        return

    handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(), self.get_environ())
    handler.request_handler = self  # backpointer for logging & connection closing
    handler.run(self.server.get_app())


class Command(RunserverCommand):
    def get_handler(self, *args, **options):
        if settings.DEBUG and platform.platform().upper().startswith("DARWIN"):
            # patch the offending code
            django.core.servers.basehttp.WSGIRequestHandler.handle_one_request.__code__ = handle_one_request.__code__

        return super().get_handler(*args, **options)

并将您的应用添加到 INSTALLED_APPS 上方的 django.contrib.staticfiles

INSTALLED_APPS = [
  . . .
  "myapp",
  "django.contrib.staticfiles",
  . . .
]