feat: 迁移所有配置到数据库,并支持运行时重载 (#364)
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use axum::body::Body;
|
||||
use axum::extract::Request;
|
||||
use axum::http::{Response, Uri, header};
|
||||
use axum::http::{Uri, header};
|
||||
use axum::response::IntoResponse;
|
||||
use axum::routing::get;
|
||||
use axum::{Extension, Router, ServiceExt, middleware};
|
||||
@@ -16,7 +15,7 @@ use utoipa_swagger_ui::{Config, SwaggerUi};
|
||||
use crate::api::auth;
|
||||
use crate::api::handler::{ApiDoc, api_router};
|
||||
use crate::bilibili::BiliClient;
|
||||
use crate::config::CONFIG;
|
||||
use crate::config::VersionedConfig;
|
||||
|
||||
#[derive(RustEmbed)]
|
||||
#[preserve_source = false]
|
||||
@@ -41,10 +40,11 @@ pub async fn http_server(database_connection: Arc<DatabaseConnection>, bili_clie
|
||||
.layer(Extension(database_connection))
|
||||
.layer(Extension(bili_client))
|
||||
.layer(middleware::from_fn(auth::auth));
|
||||
let listener = tokio::net::TcpListener::bind(&CONFIG.bind_address)
|
||||
let config = VersionedConfig::get().load_full();
|
||||
let listener = tokio::net::TcpListener::bind(&config.bind_address)
|
||||
.await
|
||||
.context("bind address failed")?;
|
||||
info!("开始运行管理页: http://{}", CONFIG.bind_address);
|
||||
info!("开始运行管理页: http://{}", config.bind_address);
|
||||
Ok(axum::serve(listener, ServiceExt::<Request>::into_make_service(app)).await?)
|
||||
}
|
||||
|
||||
@@ -56,16 +56,21 @@ async fn frontend_files(uri: Uri) -> impl IntoResponse {
|
||||
let Some(content) = Asset::get(path) else {
|
||||
return (StatusCode::NOT_FOUND, "404 Not Found").into_response();
|
||||
};
|
||||
Response::builder()
|
||||
.status(StatusCode::OK)
|
||||
.header(
|
||||
header::CONTENT_TYPE,
|
||||
content.mime_type().as_deref().unwrap_or("application/octet-stream"),
|
||||
let mime_type = content.mime_type();
|
||||
let content_type = mime_type.as_deref().unwrap_or("application/octet-stream");
|
||||
if cfg!(debug_assertions) {
|
||||
(
|
||||
[(header::CONTENT_TYPE, content_type)],
|
||||
// safety: `RustEmbed` returns uncompressed files directly from the filesystem in debug mode
|
||||
content.data().unwrap(),
|
||||
)
|
||||
.header(header::CONTENT_ENCODING, "br")
|
||||
// safety: `RustEmbed` will always generate br-compressed files if the feature is enabled
|
||||
.body(Body::from(content.data_br().unwrap()))
|
||||
.unwrap_or_else(|_| {
|
||||
return (StatusCode::INTERNAL_SERVER_ERROR, "500 Internal Server Error").into_response();
|
||||
})
|
||||
.into_response()
|
||||
} else {
|
||||
(
|
||||
[(header::CONTENT_TYPE, content_type), (header::CONTENT_ENCODING, "br")],
|
||||
// safety: `RustEmbed` will always generate br-compressed files if the feature is enabled
|
||||
content.data_br().unwrap(),
|
||||
)
|
||||
.into_response()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user