Django Channels Postgres InterfaceError:连接已关闭

2024-05-12

我似乎无法理解这里的问题。我正在为我的渠道消费者编写测试文档中的描述 https://channels.readthedocs.io/en/latest/topics/testing.html。我通常会使用 Django 默认的单元测试,但由于 Channels 需要使用 pytest,我正在使用它,但仍然希望维护编写测试的类结构。

我在编写类似于 unittest 的设置方法时遇到问题,我将使用它来初始化测试属性。我试过方法夹具 https://docs.pytest.org/en/latest/xunit_setup.html?highlight=setup_class#method-and-function-level-setup-teardown,类灯具使用自动使用=真 https://docs.pytest.org/en/latest/fixture.html#autouse-fixtures-xunit-setup-on-steroids,但它们似乎都不起作用,因为我无法访问测试方法中的实例属性。最后我决定写set_up实例方法并为每个类手动调用它。这是我到目前为止所拥有的:

@pytest.mark.django_db
@pytest.mark.asyncio
class TestChatConsumer(object):

    @database_sync_to_async
    def set_up(self):

        self.user = UserFactory()
        self.api_client = APIClientFactory()
        self.token = TokenFactory(user=self.user)

        self.credentials = {
            'AUTHORIZATION': self.token.key,
            ...
        }

        self.credentials_params = '&'.join(['{}={}'.format(k, v) for k, v in self.credentials.items()])
        self.authless_endpoint = '/api/v1/ws/'
        self.endpoint = self.authless_endpoint + '?' + self.credentials_params

    async def test_connect_without_credentials(self):
        await self.set_up()
        communicator = WebsocketCommunicator(application, self.authless_endpoint)
        connected, subprotocol = await communicator.connect()
        assert not connected

    async def test_connect_with_credentials(self):
        await self.set_up()
        communicator = WebsocketCommunicator(application, self.endpoint)
        connected, subprotocol = await communicator.connect()
        assert connected

问题是我不断得到psycopg2.InterfaceError: connection already closed当我的消费者尝试访问数据库中的代码时connect方法。它用database_sync_to_async当我手动测试它时效果很好。

具体来说,该行中connect引发错误的方法如下所示:

await database_sync_to_async(user.inbox.increment_connections)().

不确定问题到底是什么database_sync_to_async应正确清理旧连接,以便可以正确创建新连接。

任何帮助将非常感激。


显然我看错地方了。问题就在这条线上:

await database_sync_to_async(user.inbox.increment_connections)().

inbox是一个相关的管理器,因此它会尝试在实际执行之前获取它database_sync_to_async它失败了,因为它需要数据库调用。

我试过这个await database_sync_to_async(user).inbox.increment_connections()它不起作用,因为它包装了一个方法,而不是一个属性,所以我最终做的是使用prefetch_related得到inbox认证过程中。以这种方式user.inbox不再需要数据库调用并且工作正常

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Channels Postgres InterfaceError:连接已关闭 的相关文章

  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • django 翻译:msgfmt:找不到命令

    我已经使用 wiki 脚本 webfaction 安装了 OSQA 现在我想编译一个消息文件 但出现以下错误 django msgfmt command not found 命令 输出 ls apache2 bin lib osqa osq
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • Prettier vscode 扩展不支持 Django 模板标签 {% tag %}

    Prettier Visual Studio 代码扩展不支持 Django 模板标签 tag 现在我该如何解决这个问题 我是否必须禁用 html 文件的 Prettier 扩展 或者还有其他解决方案吗 github 中的问题 5581 不支
  • 如何将我的 html 表单发布到 django 模型并保存?

    我有 html 表单 我想发送并保存到 django 模型 当我尝试发送消息时出现错误 ValueError at account userinfo akylson
  • 连接所有 PostgreSQL 表并创建 Python 字典

    我需要加入allPostgreSQL 表并将它们转换为 Python 字典 数据库中有72张表 总列数大于1600 我编写了一个简单的 Python 脚本 该脚本连接多个表 但由于以下原因无法连接所有表内存错误 https gist git
  • Django - 未找到“”的反向。 '' 不是有效的视图函数或模式名称

    我正在研究我的课程项目 但现在我完全陷入困境 我正在创建一个网站通过 PayPal 销售产品 但 PayPal 退货 取消页面未正确呈现 我已经按照课程中的示例检查了代码一百次 但显然我遗漏了一些东西 当我转到产品 单击 立即购买 登录 P
  • 将 Django Model 对象转换为 dict,所有字段都完好无损

    如何将 django Model 对象转换为 dictall它的领域 理想情况下 所有内容都包含外键和 editable False 的字段 让我详细说明一下 假设我有一个如下所示的 django 模型 from django db imp
  • 记录 Google Cloud SQL PostgreSQL 实例上的慢速查询

    我工作的公司使用 Google Cloud SQL 来管理生产中的 SQL 数据库 我们遇到了性能问题 我认为查看 监控高于特定阈值 例如 250 毫秒 的所有查询是一个好主意 除其他外 通过查看PostgreSQL 文档 https ww
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • django import-export 是否可以自定义预览模板?

    我的管理端将由非系统管理员人员使用 因此我希望它尽可能清晰 我不明白如何在确认导入之前自定义预览 要添加具有外键引用的对象 我只需查找匹配的 idbefore import函数并按照解释替换它here https stackoverflow
  • GET 错误:ModuleNotFoundError:没有名为“api”的模块

    当我尝试运行 pytest 命令时出现错误 错误是当我在 docker 上运行应用程序时 当我在本地执行时 它可以工作 还有另一个好奇心 swagger 和 de requests 工作正常 只是测试文件不行 我已经尝试过 python m
  • 在PostgreSQL中,如何使用COPY命令插入数据?

    我在使用 PostgreSQL 数据库运行 1 个 NodeJs 项目时遇到问题 尝试使用 pgAdmin 插入数据时出现错误COPY命令 COPY beer name tags alcohol brewery id brewery id
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • 如何在Django中获取某个组的所有用户?

    我想获取 Django 组中所有用户的列表 例如 User objects filter group Staff 我在文档中的任何地方都找不到如何执行此查询 以下查询解决了我的问题 User objects filter groups na
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar

随机推荐