如何解决使用actix-web + mongo编译应用程序会在Linux上耗尽内存
我无法在Linux(Ubuntu 18 Bionic Beaver)上编译以下内容。我已经尝试了Docker和VirtualBox VM,但是rustc
最终都耗尽了这两个内存。该代码在macOS上编译没有问题,并在Linux上编译到大约5天之前。
use {
actix_web::{
get,web::{self},App,HttpResponse,HttpServer,},mongodb::{
options::{ClientOptions,StreamAddress},Client,Database,};
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
let options = ClientOptions::builder()
.hosts(vec![StreamAddress {
hostname: "localhost".into(),port: Some(27017),}])
.build();
let client = Client::with_options(options).unwrap();
HttpServer::new(move || {
App::new()
.data(AppState {
db: client.database("mydb"),})
.service(hi)
})
.bind("localhost:3000")
.unwrap()
.run()
.await;
Ok(())
}
#[get("/hi")]
async fn hi(state: web::Data<AppState>) -> actix_web::Result<HttpResponse> {
state.db.collection("mycoll").find(None,None).await;
HttpResponse::Ok().await
}
struct AppState {
db: Database,}
Cargo.toml中的依赖项:
[dependencies]
actix-rt = "1.1.1"
actix-web = "2.0.0"
mongodb = "1.1.0"
在上一个成功的CI构建和第一个开始失败的CI构建之间唯一改变的是在服务器上添加一个端点(本质上是现有副本的复制/粘贴),并且在服务器上创建了次要版本。时间箱(间接依赖)。检出最后一个有效的提交,并尝试构建不起作用的。
如果我删除了await
调用中的find()
,它将在Linux上编译,但是如果我将find
调用(使用await
)也将编译。在非Actix async fn
中。
如果我使用mongo的sync
功能也可以,但这并不理想。
降级到Rust 1.45可以对其进行编译,因此显然1.46版本中的某些内容以某种方式破坏了actix或mongo条板箱。
由于此代码可在macOS上运行,并在上周在Linux上运行,因此我假设在像这样的Actix-web路由处理程序中使用Mongo并没有根本问题。我想念什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。