【问题标题】:Vapor parameter decoding hangs up HTTP requestVapor 参数解码挂起 HTTP 请求
【发布时间】:2019-01-23 05:09:36
【问题描述】:

我有一个奇怪的问题。我在数字海洋机器上的码头内运行蒸汽。 除了 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 的所有其他方法在我的数字海洋码头机器中也不起作用。

类似于简单的创建工作:

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 compose 配置时, 一切正常 - 没有挂起的 http 请求。

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

谢谢!

【问题讨论】:

    标签: swift http docker digital-ocean vapor


    【解决方案1】:

    我从 Vapor Discord 聊天中的好人那里得到了解决方案:https://discord.gg/BnXmVGA

    感谢@vzsg 和@jimmya92。

    蒸汽应用程序正在最小的数字海滴上运行:

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

    存在一个已知问题,即 Fluent 的默认配置在单核系统上限制了过多的连接数 这可能导致这样的死锁 将此放在 configure.swift 中以解决它:

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

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2014-06-27
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多