forked from TWS/kalkutago
Add static file server to rocket & SPA index redirect
This commit is contained in:
parent
f794f5c974
commit
0b57f140cb
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
|||
**/target
|
||||
|
||||
**/*.pw
|
||||
python-venv/
|
||||
tickmate-backup-20230524.db
|
||||
|
|
17
Makefile
Normal file
17
Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
all: start-server
|
||||
|
||||
client/dist/index.html:
|
||||
cd client; yarn && yarn build
|
||||
|
||||
build-client: client/dist/index.html
|
||||
|
||||
server/public/: client/dist/index.html
|
||||
rsync -a client/dist/ server/public/
|
||||
|
||||
start-server: server/public/
|
||||
docker compose up --build -d
|
||||
|
||||
clean:
|
||||
docker compose down
|
||||
rm -r server/public/ client/dist/
|
|
@ -8,4 +8,5 @@ ADD src/ src/
|
|||
RUN rm dummy.rs &&\
|
||||
sed -i "s:dummy.rs:src/main.rs:" Cargo.toml
|
||||
RUN cargo build --release
|
||||
ADD public/ public/
|
||||
CMD ["target/release/kalkulog-server"]
|
||||
|
|
|
@ -6,18 +6,29 @@ mod tracks;
|
|||
use std::default::default;
|
||||
use std::net::{IpAddr, Ipv4Addr};
|
||||
|
||||
use rocket::fs::{FileServer, NamedFile};
|
||||
use rocket::Config;
|
||||
use sea_orm::DatabaseConnection;
|
||||
|
||||
use crate::error::Error;
|
||||
use crate::rocket::{Build, Rocket};
|
||||
|
||||
pub(crate) use error::ErrorResponder;
|
||||
|
||||
use self::error::ApiResult;
|
||||
|
||||
#[get("/status")]
|
||||
fn status() -> &'static str {
|
||||
"Ok"
|
||||
}
|
||||
|
||||
#[catch(404)]
|
||||
async fn spa_index_redirect() -> ApiResult<NamedFile> {
|
||||
Ok(NamedFile::open("/src/public/index.html")
|
||||
.await
|
||||
.map_err(Error::from)?)
|
||||
}
|
||||
|
||||
pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
||||
use groups::*;
|
||||
use ticks::*;
|
||||
|
@ -27,6 +38,7 @@ pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
|||
address: IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
|
||||
..default()
|
||||
})
|
||||
.register("/", catchers![spa_index_redirect])
|
||||
.manage(db)
|
||||
.mount("/api/v1", routes![status])
|
||||
.mount(
|
||||
|
@ -41,4 +53,5 @@ pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
|||
"/api/v1/groups",
|
||||
routes![all_groups, group, insert_group, update_group, delete_group],
|
||||
)
|
||||
.mount("/", FileServer::from("/src/public"))
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ pub enum Error {
|
|||
Builder(#[from] UninitializedFieldError),
|
||||
#[error(transparent)]
|
||||
SeaOrm(#[from] sea_orm::DbErr),
|
||||
#[error(transparent)]
|
||||
Io(#[from] std::io::Error),
|
||||
}
|
||||
|
||||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
|
|
Loading…
Reference in a new issue