При компиляции приложения с использованием actix-web mongo в Linux не хватает памяти

#linux #mongodb #rust #actix-web

#linux #mongodb #Ржавчина #actix-web

Вопрос:

Я не могу скомпилировать следующее в Linux (Ubuntu 18 Bionic Beaver). Я пробовал как виртуальные машины Docker, так и VirtualBox, но 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 и первой, которая начала давать сбой, — это добавление конечной точки на сервер (которая по сути была копией / вставкой существующей) и незначительный скачок версии во времени (косвенная зависимость).). Проверка последнего рабочего коммита и попытка сборки, которая не работает.

Если я удалю await при find() вызове, он будет компилироваться в Linux, но он также будет компилироваться, если я помещу этот find вызов (с await ) в не-Actix async fn .

Это также работает, если я использую sync функцию mongo, что было бы не идеально.

Понижение версии до Rust 1.45 позволяет ей компилироваться, поэтому, по-видимому, что-то в выпуске 1.46 каким-то образом нарушило работу ящиков actix или mongo.

Поскольку этот код работает на macOS и работал на Linux на прошлой неделе, я предполагаю, что нет фундаментальной проблемы с использованием Mongo в обработчике маршрутов Actix-web, подобном этому. Я что-то упускаю?

Комментарии:

1. Что вы изменили за последние 5 дней? Может быть, компилятор ?

2. версия rust 1.47 также не работает.