我有一个奇怪的问题。我正在数字海洋机器上的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计算机中也无法正常工作。
类似于简单创建的作品:
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请求。
我不知道该怎么做才能找到错误,有人可以帮助我吗? 如果我应该提供一些文件来解决该问题,请留下简短的说明,我将更新该帖子。
谢谢!
答案 0 :(得分:2)
我从Vapor Discord聊天中的出色人员那里获得了解决方案:https://discord.gg/BnXmVGA
感谢@vzsg和@ jimmya92。
蒸气应用程序在最小的数字海洋液滴上运行:
存在一个已知的问题,即Fluent的默认配置限制了单核系统上的连接数过多 这样会导致死锁 将其放在configure.swift中即可解决:
let poolConfig = DatabaseConnectionPoolConfig(maxConnections: 16)
services.register(poolConfig)