mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-05 07:28:04 +08:00
feat: bind_address 绑定失败后尝试 fallback 到默认地址,避免无法启动 web 服务 (#590)
This commit is contained in:
@@ -13,6 +13,6 @@ pub(super) fn default_auth_token() -> String {
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn default_bind_address() -> String {
|
pub(crate) fn default_bind_address() -> String {
|
||||||
"0.0.0.0:12345".to_string()
|
"0.0.0.0:12345".to_string()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ mod versioned_config;
|
|||||||
|
|
||||||
pub use crate::config::args::{ARGS, version};
|
pub use crate::config::args::{ARGS, version};
|
||||||
pub use crate::config::current::{CONFIG_DIR, Config};
|
pub use crate::config::current::{CONFIG_DIR, Config};
|
||||||
|
pub(crate) use crate::config::default::default_bind_address;
|
||||||
pub use crate::config::handlebar::TEMPLATE;
|
pub use crate::config::handlebar::TEMPLATE;
|
||||||
pub use crate::config::item::{ConcurrentDownloadLimit, NFOTimeType, PathSafeTemplate, RateLimit, Trigger};
|
pub use crate::config::item::{ConcurrentDownloadLimit, NFOTimeType, PathSafeTemplate, RateLimit, Trigger};
|
||||||
pub use crate::config::versioned_cache::VersionedCache;
|
pub use crate::config::versioned_cache::VersionedCache;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use sea_orm::DatabaseConnection;
|
|||||||
|
|
||||||
use crate::api::{LogHelper, router};
|
use crate::api::{LogHelper, router};
|
||||||
use crate::bilibili::BiliClient;
|
use crate::bilibili::BiliClient;
|
||||||
use crate::config::VersionedConfig;
|
use crate::config::{VersionedConfig, default_bind_address};
|
||||||
|
|
||||||
#[derive(RustEmbed)]
|
#[derive(RustEmbed)]
|
||||||
#[preserve_source = false]
|
#[preserve_source = false]
|
||||||
@@ -30,10 +30,29 @@ pub async fn http_server(
|
|||||||
.layer(Extension(database_connection))
|
.layer(Extension(database_connection))
|
||||||
.layer(Extension(bili_client))
|
.layer(Extension(bili_client))
|
||||||
.layer(Extension(log_writer));
|
.layer(Extension(log_writer));
|
||||||
let bind_address = VersionedConfig::get().read().bind_address.to_owned();
|
let (bind_address, listener) = {
|
||||||
let listener = tokio::net::TcpListener::bind(&bind_address)
|
let bind_address = VersionedConfig::get().read().bind_address.to_owned();
|
||||||
.await
|
let listen_res = tokio::net::TcpListener::bind(&bind_address)
|
||||||
.context("bind address failed")?;
|
.await
|
||||||
|
.context("bind address failed");
|
||||||
|
match listen_res {
|
||||||
|
Ok(listener) => (bind_address, listener),
|
||||||
|
Err(e) => {
|
||||||
|
let default_bind_address = default_bind_address();
|
||||||
|
if default_bind_address == bind_address {
|
||||||
|
return Err(e);
|
||||||
|
}
|
||||||
|
warn!(
|
||||||
|
"绑定到地址 {} 失败:{:#},尝试绑定到默认地址 {}",
|
||||||
|
bind_address, e, default_bind_address
|
||||||
|
);
|
||||||
|
let listener = tokio::net::TcpListener::bind(&default_bind_address)
|
||||||
|
.await
|
||||||
|
.context("bind default address failed")?;
|
||||||
|
(default_bind_address, listener)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
info!("开始运行管理页:http://{}", bind_address);
|
info!("开始运行管理页:http://{}", bind_address);
|
||||||
Ok(axum::serve(listener, ServiceExt::<Request>::into_make_service(app)).await?)
|
Ok(axum::serve(listener, ServiceExt::<Request>::into_make_service(app)).await?)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user