vapor参数解码挂掉HTTP请求

Vapor parameter decoding hangs up HTTP request

我有一个奇怪的问题。我在数字海洋 mac 网络中 运行 宁波 docker 中。 除了 PATCH 和 DELETE 请求外,我的所有请求都按预期工作。

在下面的代码中 patch enter 将被记录但不会 parameter decode。 HTTP 请求似乎 运行 永远,其他并行请求不可能

func patch(_ req: Request) throws -> Future<Manufacturer> {
    let logger = try req.make(Logger.self)
    logger.info("patch enter")
    return try req.parameters.next(Manufacturer.self).flatMap { manufacturer in
        logger.info("parameter decode")
        return try req.content.decode(Manufacturer.self).flatMap { patchManufacturer in
            logger.info("content decode")
            manufacturer.name = patchManufacturer.name
            return manufacturer.save(on: req)
        }
    }
}

使用 req.parameters.next(ModelName.self).flatMap 的所有其他方法在我的数字海洋中也不起作用 docker machine。

类似简单创建的作品:

func create(_ req: Request) throws -> Future<Manufacturer> {
    return try req.content.decode(Manufacturer.self).flatMap { manufacturer in
        return manufacturer.save(on: req)
    }
}

所以我认为一定有问题:

return try req.parameters.next(Manufacturer.self).flatMap { manufacturer in

奇怪的部分是:当我在 mac 上启动相同的 docker 组合配置时, 一切都按预期工作 - 没有挂断 http 请求。

我不知道该怎么做才能找到错误,有人可以帮助我吗? 如果我应该提供一些文件来解决问题,请留言,我会更新 post.

谢谢!

我从 Vapor Discord Chat 的大佬那里得到了解决方案:https://discord.gg/BnXmVGA

感谢@vzsg 和@jimmya92。

vapor 应用 运行 最小的数字海洋水滴:

  • 1GB 内存
  • 1 个 vCPU
  • 25GB 固态硬盘

there's a known issue that Fluent's default configuration limits the number of connections too much on single core systems which can lead to deadlocks like this drop this in configure.swift to work around it:

let poolConfig = DatabaseConnectionPoolConfig(maxConnections: 16)
services.register(poolConfig)