我有一个奇怪的问题。我在 digital ocean 机器上的 docker 内部运行 Vapor。 除了 PATCH 和 DELETE 请求之外,我的所有请求都按预期工作。
在以下代码中,patch Enter
将被记录,但不会记录参数解码
。
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
的所有其他方法在我的 digital ocean docker 机器中也不起作用。
类似简单的创建工作:
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 请求。
我不知道该怎么做才能发现错误,有人可以帮助我吗? 如果我应该提供一些文件来解决问题,请留下简短的说明,我将更新帖子。
谢谢!
最佳答案
我从 Vapor Discord 聊天中的很棒的人那里得到了解决方案:https://discord.gg/BnXmVGA
感谢@vzsg和@jimmya92。
Steam 应用程序在最小的 digital ocean 水滴上运行:
- 1GB内存
- 1vCPU
- 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)
关于swift - Vapor参数解码挂起HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873680/