#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 также не работает.