try next port if taken
parent
649235f1d2
commit
6b95e59acf
71
src/main.rs
71
src/main.rs
|
@ -109,12 +109,11 @@ fn main() -> Result<()> {
|
|||
#[cfg(not(feature = "thumbnails"))]
|
||||
let thumbnail_store = None;
|
||||
|
||||
let bind: SocketAddr = matches
|
||||
let mut bind: SocketAddr = matches
|
||||
.value_of("BIND")
|
||||
.unwrap()
|
||||
.parse()
|
||||
.expect("Incorrect bind format.");
|
||||
info!("Starting server at: {}", &bind);
|
||||
|
||||
let state = routes::State {
|
||||
upend: upend.clone(),
|
||||
|
@ -141,32 +140,54 @@ fn main() -> Result<()> {
|
|||
warn!("No Web UI directory present ({:?}), disabling...", ui_path);
|
||||
}
|
||||
let ui_enabled = ui_path.exists() && !matches.is_present("NO_UI");
|
||||
HttpServer::new(move || {
|
||||
let app = App::new()
|
||||
.data(state.clone())
|
||||
.wrap(middleware::Logger::default().exclude("/api/jobs"))
|
||||
.service(routes::get_raw)
|
||||
.service(routes::get_thumbnail)
|
||||
.service(routes::get_query)
|
||||
.service(routes::get_object)
|
||||
.service(routes::put_object)
|
||||
.service(routes::delete_object)
|
||||
.service(routes::api_refresh)
|
||||
.service(routes::list_hier)
|
||||
.service(routes::list_hier_roots)
|
||||
.service(routes::latest_files)
|
||||
.service(routes::get_file)
|
||||
.service(routes::get_jobs)
|
||||
.service(routes::get_info);
|
||||
|
||||
if ui_enabled {
|
||||
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
|
||||
let mut cnt = 0;
|
||||
let server = loop {
|
||||
let state = state.clone();
|
||||
let ui_path = ui_path.clone();
|
||||
|
||||
let server = HttpServer::new(move || {
|
||||
let app = App::new()
|
||||
.data(state.clone())
|
||||
.wrap(middleware::Logger::default().exclude("/api/jobs"))
|
||||
.service(routes::get_raw)
|
||||
.service(routes::get_thumbnail)
|
||||
.service(routes::get_query)
|
||||
.service(routes::get_object)
|
||||
.service(routes::put_object)
|
||||
.service(routes::delete_object)
|
||||
.service(routes::api_refresh)
|
||||
.service(routes::list_hier)
|
||||
.service(routes::list_hier_roots)
|
||||
.service(routes::latest_files)
|
||||
.service(routes::get_file)
|
||||
.service(routes::get_jobs)
|
||||
.service(routes::get_info);
|
||||
|
||||
if ui_enabled {
|
||||
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
|
||||
} else {
|
||||
app
|
||||
}
|
||||
});
|
||||
|
||||
let bind_result = server.bind(&bind);
|
||||
if let Ok(server) = bind_result {
|
||||
break server;
|
||||
} else {
|
||||
app
|
||||
warn!("Failed to bind at {:?}, trying next port number...", bind);
|
||||
bind.set_port(bind.port() + 1);
|
||||
}
|
||||
})
|
||||
.bind(&bind)?
|
||||
.run();
|
||||
|
||||
if cnt > 10 {
|
||||
panic!("Couldn't start server.")
|
||||
} else {
|
||||
cnt += 1;
|
||||
}
|
||||
};
|
||||
|
||||
info!("Starting server at: {}", &bind);
|
||||
server.run();
|
||||
|
||||
if !matches.is_present("NO_INITIAL_UPDATE") {
|
||||
info!("Running initial update...");
|
||||
|
|
Loading…
Reference in New Issue